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