NUnit中单个测试的超时

时间:2011-01-05 15:03:49

标签: c# .net nunit

我有以下问题:我知道NUnit中有一个Timeout属性。我的问题是单元测试实际上产生了一个新进程,如果冻结从未被NUnit杀死。如何实现实际摆脱流氓过程的超时?

谢谢, R上。

4 个答案:

答案 0 :(得分:14)

您可以使用超时断言,而不是整个测试方法的超时:

Assert.That(actual, Is.EqualTo(expected).After(5000, 50));

答案 1 :(得分:5)

修改:接受的答案更好。

如果您的测试最终超时(尽管比您希望的要晚),您始终可以使用MaxTime属性:http://www.nunit.org/index.php?p=maxtime&r=2.5.1并自行清理线程:

[Test, Maxtime(2000)]
public void TimedTest()
{
    ...
}

否则,您最好的选择可能是实现自己的计时机制。使用计时器(或繁忙的while循环)并且如果超过超时,则终止进程(如果它在测试中是通用的,可能在ShutDown方法中)并且信号失败。

NUnit超时没有任何允许您在测试超时后运行代码的事件。你必须自己动手,看起来像。

答案 2 :(得分:2)

[Test, Timeout(2000)]
public void PotentiallyLongRunningTest()
{
    ...
}

http://www.nunit.org/index.php?p=timeout&r=2.5.1

TimeoutAttribute用于指定测试用例的超时值(以毫秒为单位)。如果测试用例的运行时间超过指定的时间,则会立即取消并报告为失败,并显示超出超时的消息。

也可以在fixture或程序集上指定该属性,在这种情况下,它指示任何从属测试用例的默认超时。

答案 3 :(得分:0)

行。在我尝试了NUnit中内置的所有功能并且无法实现我所需要的功能之后,我做了以下操作:我添加了一个定时器,该定时器在一个函数中设置为[SetUp]属于一个夹具级别,因此在之前被调用每次测试。如果计时器在测试结束前计时,我只需在计时器回调中进行清理。