我知道NUnit有一个超时(Timeout)属性。我的问题是,单元测试实际上会生成一个新进程,如果该进程被冻结,NUnit无法杀死它。我该如何实现一个超时机制来摆脱这个“流氓进程”?
您可以使用断言的超时时间,而不是整个测试方法的超时时间:
Assert.That(actual, Is.EqualTo(expected).After(5000, 50));
编辑:被采纳的答案更好。
如果您的测试最终超时(尽管比您希望的晚),您可以始终使用MaxTime
属性:http://www.nunit.org/index.php?p=maxtime&r=2.5.1并自己清理线程:
[Test, Maxtime(2000)]
public void TimedTest()
{
...
}
[Test, Timeout(2000)]
public void PotentiallyLongRunningTest()
{
...
}
http://www.nunit.org/index.php?p=timeout&r=2.5.1 :
TimeoutAttribute用于指定测试用例的超时时间(以毫秒为单位)。如果测试用例运行时间超过指定的时间,则立即取消并报告为失败,并显示超时消息。
该属性还可以在fixture或assembly上指定,这表示子测试用例的默认超时时间。
好的。在我尝试了所有内置的 NUnit 功能并未能达到我所需的目标后,我做了以下操作:我添加了一个计时器,在一个被标记为 [SetUp] 的函数中设置它,该函数在每个测试之前被调用。如果计时器在测试完成之前触发,我只需在计时器回调中进行清理。