Как я могу запустить событие обработчик назначен макету?

Я пытаюсь запустить обработчик событий, назначенный моему макету таймера. Как я могу здесь протестировать этот частный метод?

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 есть только внутренний конструктор.

14
задан Ufuk Hacıoğulları 14 January 2016 в 06:24
поделиться