我正在尝试在Visual Studio中的测试中使用NUnit Timeout属性,但它似乎不起作用。我希望这个测试失败,但它会运行20秒然后通过。
为什么不失败?
namespace Tests
{
using System.Threading;
using NUnit.Framework;
[TestFixture]
public class timeout_tests
{
[Test, Timeout(1)]
public void timeout_test()
{
Thread.Sleep(20000);
}
}
}
我尝试使用NUnit.framework.dll版本3.0.0以及最新版本3.0.1。两个版本的测试在20秒后通过。
答案 0 :(得分:1)
事实证明,使用较旧的NUnit测试适配器(例如版本2.0.0.0),测试在20秒后通过,这不是预期的结果。
删除旧适配器并安装NUnit3测试适配器后,现在测试立即失败,这是预期的结果。
答案 1 :(得分:-1)
这似乎已在latest version of the NUnit adapter,2.1.1。
中修复 但是,我个人被愚弄了,因为我发送了大量的输出到Console
(在输出窗口中捕获,我相信适配器)很快。这在输出中创建了一种“后退日志”,.NET希望在测试退出之前完成发送它收到的输出。您可以使用以下测试模拟此行为:
[Test, Timeout(10000)] // Time out in 10 seconds
public void Test_MyFunction_DoesNotRunForever()
{
DateTime start = DateTime.Now;
while (true)
{
TimeSpan runTime = DateTime.Now - start;
System.Diagnostics.Debug.WriteLine("Doing stuff for " + runTime.TotalSeconds + " seconds." + (runTime.TotalSeconds > 10 ? " Buggy! :(" : ""));
}
}
如果你看着它运行,你会注意到即使在几分钟过后,它仍然像Doing stuff for 2.043 seconds.
那样打印输出。
如果你不想减少输出,你应该使用Thread.Sleep
之类的人工减速来减慢输出速度,最好不要改变代码。即使Thread.Sleep(1)
足以防止这样的积压。想到的一些选项: