相关疑难解决方法(0)

单元测试使用Timer的类

我有一个类有私有成员的类System.Windows.Forms.Timer.每次我的计时器滴答时都会调用一个私有方法.

  1. 是否值得测试该方法?(因为它是私人的)
  2. 我该怎么测试呢?(我知道我可以让我的测试类继承我要测试的类......)
  3. 我应该嘲笑我的计时器吗?因为如果我必须测试一个使用内部计时器的类,我的测试可能需要很长时间才能完成,对吧?

编辑:

实际上,该方法依赖于时序,这里是代码:

private void alertTick(object sender, EventArgs e) {
    if (getRemainingTime().Seconds <= 0) {
        Display.execute(Name, WarningState.Ending, null);
        AlertTimer.Stop();
    }
    else {
        var warning = _warnings.First(x => x == getRemainingTime());

        if (warning.TotalSeconds > 0)
            Display.execute(Name, WarningState.Running, warning);
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,如果计时器正在运行,它将Display.execute()从结束时(当剩余时间等于0时)使用不同的参数进行调用.这会是设计问题吗?

c# tdd unit-testing

35
推荐指数
2
解决办法
2万
查看次数

如何运行分配给模拟的事件处理程序?

我试图触发分配给我的计时器模拟的事件处理程序.我如何在这里测试这个私有方法?

public interface ITimer
{
    void Start();
    double Interval { get; set; }
    event ElapsedEventHandler Elapsed;
}
Run Code Online (Sandbox Code Playgroud)

客户端类为此对象分配事件处理程序.我想测试这个类中的逻辑.

_timer.Elapsed += ResetExpiredCounters;
Run Code Online (Sandbox Code Playgroud)

分配的方法是私有的

private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

我希望在我的模拟中有这个事件处理程序并以某种方式运行它.我怎样才能做到这一点?

更新:

在分配事件处理程序之前,我意识到我正在提升事件.我纠正了这个,但我仍然得到这个错误:

System.ArgumentException : Object of type 'System.EventArgs' cannot be converted 
to type 'System.Timers.ElapsedEventArgs'.
Run Code Online (Sandbox Code Playgroud)

我这样举起来:

_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)

要么

_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)

两者都行不通.

更新:

这对我有用.请注意,如果您尝试将信息传递给事件处理程序(如Jon在评论中指出),则无效.我只是用它来模拟System.Timers.Timer类的包装器.

_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
Run Code Online (Sandbox Code Playgroud)

最后,如果你需要使用事件参数,这根本不会有用,因为它总是为null.但是,这是自ElapsedEventArgs只有一个内部构造函数以来的唯一方法.

.net c# moq event-handling

14
推荐指数
2
解决办法
6210
查看次数

标签 统计

c# ×2

.net ×1

event-handling ×1

moq ×1

tdd ×1

unit-testing ×1