当 NUnit 遇到超时时到底会做什么?我曾经认为它会通过抛出 TimeoutException 来中止测试,但这个测试证明并非如此:
[Test, Timeout(100), ExpectedException(typeof(TimeoutException))]
public static void RaisingExpectedTimeoutException()
{
Thread.Sleep(500);
}
不幸的是,nunit 控制台只报告超时违规,但不报告测试如何中止。有谁更了解这是如何运作的吗?为什么上面的测试没有引发我期望的 TimeoutException ? (尽管它是 .NET 异常类型,但我认为 NUnit 使用该异常来进行超时违规)。
PS:这个测试方法也失败:
[Test, Timeout(100), ExpectedException(typeof(ThreadAbortException))]
public static void RaisingExpectedThreadAbortException()
{
Thread.Sleep(500);
}
并且这个测试方法成功了(“没有人预料到西班牙的宗教裁判所!”):
[Test, ExpectedException(typeof(ThreadAbortException))]
public static void ThrowingExpectedThreadAbortException()
{
Thread.CurrentThread.Abort();
}
如果 NUnit 中的测试方法指定超时,那么它将在与其余测试不同的线程上运行。如果测试超过超时,创建的线程将被粗鲁地中止Thread.Abort
.
关于中止的部分在文档中并不明确,但在深入研究 NUnit 代码库后就很明显了。看TestThread.RunTest
了解详情。
EDIT*
即使您捕获了异常,测试在超时时也会失败的原因是,测试在中止线程之前被标记为失败。因此,是否符合预期是没有意义的,因为它已经被标记为失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)