Я пытаюсь запустить обработчик событий, назначенный моему макету таймера. Как я могу здесь протестировать этот частный метод?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
Класс клиента назначает этому объекту обработчик событий. Я хочу проверить логику в этом классе.
_timer.Elapsed += ResetExpiredCounters;
И назначенный метод является частным.
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
Я хочу, чтобы этот обработчик событий был в моем макете и как-то его запускал. Как я могу это сделать?
Обновление:
Я понял, что вызываю событие, прежде чем назначил обработчик события.Я исправил это, но по-прежнему получаю эту ошибку:
System.ArgumentException : Object of type 'System.EventArgs' cannot be converted
to type 'System.Timers.ElapsedEventArgs'.
Я поднимаю это так:
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
или
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
И то, и другое не работает.
Обновление:
Вот вещь, которая у меня сработала. Обратите внимание, что это бесполезно, если вы пытаетесь передать информацию обработчику событий, как указал Джон в комментариях. Я просто использую его для имитации оболочки для класса System.Timers.Timer.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
В конце концов, это вообще не поможет, если вам нужно использовать аргументы события, поскольку он всегда будет иметь значение NULL. Однако это единственный способ, поскольку у ElapsedEventArgs есть только внутренний конструктор.