Я пытаюсь запустить обработчик событий, назначенный моему макету таймера. Как я могу проверить этот приватный метод здесь?
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);
В конце концов, это совсем не поможет, если вам нужно использовать аргументы события, поскольку оно всегда будет нулевым. Однако это единственный способ, поскольку ElapsedEventArgs имеет только внутренний конструктор.