继承自System.Timers.ElapsedEventArgs以使单元测试更容易

时间:2016-06-27 17:32:45

标签: c# unit-testing events inheritance timer

当我尝试从System.Timers.ElapsedEventArgs继承时,我无法创建有效的类,因为唯一的构造函数是内部的(从1获取)

我想这样做是因为我希望能够创建我正在派生的类的实例,并在调用Timer的已用事件进行单元测试时将其作为参数传递。

为了帮助测试,我创建了一个间接层,使用不同的事件作为类的属性,我可以使用公共方法调用它。我知道这不是现在正确做事的正确方法,但我想让测试正常工作,我想找出替代系统时钟/定时器的方法。

新事件作为财产:

public event System.Timers.ElapsedEventHandler PerformEvent;

链式事件。这样一来,如果时间流逝它会触发,或者我可以自己调用它:

this.m_timer.Elapsed += this.PerformEvent;

我正在尝试创建一种调用它的公共方式,并且不能新建一个ElapsedEventArgs。

    public void FireEvent()
    {
        object o = new object();
        this.PerformEvent.Invoke(o, objectIWantToBeElapsedEventArgs)
    }

1:http://referencesource.microsoft.com/#System/services/timers/system/timers/ElapsedEventArgs.cs,fa59a445f56b7851

   internal ElapsedEventArgs(int low, int high) {        
        long fileTime = (long)((((ulong)high) << 32) | (((ulong)low) & 0xffffffff));
        this.signalTime = DateTime.FromFileTime(fileTime);                        
    }

1 个答案:

答案 0 :(得分:0)

如果你需要创建一个新的ElapsedEventArgs,你可以使用typemock isolator来调用它的内部构造函数,我已经为你的例子创建了一个测试:

bootstrap(Main, [MyService])

您可以在here中详细了解相关信息。