上下文是我试图对System.Timers.Timer的运行时间事件处理程序进行单元测试
我遵循了https://stackoverflow.com/a/9088455/1713336中的答案,它建议通过创建Timer Package 器并使用timerFake.Elapsed += Raise.With<ElapsedEventArgs>(ElapsedEventArgs.Empty).Now;
(注意,这是FakeItEasy)来调用事件
我试过了。
不幸的是,这会导致编译器错误,声明为Argument type 'System.EventArgs' is not assignable to parameter type 'System.Timers.ElapsedEventArgs'
如果你看一下Nonsense error message when manually calling EventHandler,你会发现System.Timers.ElapsedEventArgs没有重新声明Empty,我相信这就是为什么会出现这个错误。
是否有解决此问题的方法?我仍然希望调用经过的计时器事件
1条答案
按热度按时间fjaof16o1#
在@Hans Passant的帮助下,我找到了解决方案
首先,我们创建一个带有反射的
ElapsedEventArgs
对象然后我引发了一个事件,用
timerFake.Elapsed += Raise.FreeForm.With(this, args)
触发计时器的Elapsed处理程序;其中args
是使用反射创建的ElapsedEventArgs
。Raise.FreeForm
引发使用自定义委托定义的事件,如下所述https://fakeiteasy.github.io/docs/7.3.1/raising-events/