我正试图触发分配给我的计时器模拟的事件处理程序。我该如何测试这个私有方法?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
客户端类为此对象分配了一个事件处理程序。我想测试这个类中的逻辑。
_timer.Elapsed += ResetExpiredCounters;
所分配的方法是私有的
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
我想在我的 mock 中添加这个事件处理程序,并以某种方式运行它。我该如何做?
更新:
我意识到我在分配事件处理程序之前触发了事件。我已经纠正了这一点,但我仍然收到此错误:
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);
两个都不起作用。
更新:
这是对我有效的方法。请注意,如果您试图向事件处理程序传递信息(如Jon在评论中指出的那样),则此方法将无效。我只是使用它来模拟System.Timers.Timer类的包装器。
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
最终,如果需要使用事件参数,这样做将毫无帮助,因为它将始终为空。但是,这是唯一的方法,因为ElapsedEventArgs只有一个内部构造函数。
ITimer
接口中的ElapsedEventHandler
确实是System.Timers.ElapsedEventHandler
吗? - vgru