【发布时间】:2012-07-14 19:12:21
【问题描述】:
我有一个类,它有一个类型为System.Windows.Forms.Timer 的私有成员。还有一个私有方法,每次我的计时器计时都会被调用。
- 是否值得测试该方法? (因为它是私人的)
- 如何测试它? (我知道我可以让我的测试类继承我想要测试的类...)
- 我应该嘲笑我的计时器吗?因为如果我必须测试一个使用内部计时器的类,我的测试可能需要很长时间才能完成,对吧?
编辑:
其实这个方法是有时序依赖的,代码如下:
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);
}
}
如您所见,如果计时器正在运行,它会调用Display.execute(),并使用与结束时不同的参数(剩余时间等于0 时)。这会是设计问题吗?
【问题讨论】:
-
你想验证什么行为?
-
实际方法本身是否对时间有任何依赖性?你的单元测试应该测试方法的功能;它被定期调用的事实不应该改变您想要测试该方法是否有效的事实。我会说绝对没有必要模拟计时器,除非方法的成功取决于时间。当涉及到测试时,方法的可访问性应该无关紧要。它是您程序的功能部分。
-
+1,因为我输入了完全相同的问题进行私人领域测试,你按时击败了我
-
值得测试的是您可以更好地处理的事情。有风险吗?会失败吗?一般准则是通过使用它们的公共方法来测试私有方法。最后,如果时间方面/角色难以测试/不可预测,您应该模拟它。
标签: c# unit-testing tdd