gpt4 book ai didi

c# - 当违反测试超时时,NUnit 将在内部做什么?

转载 作者:太空狗 更新时间:2023-10-30 00:55:27 26 4
gpt4 key购买 nike

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

编辑*

测试在超时时失败的原因,即使您捕获了异常,是因为测试在中止线程之前被标记为失败。因此,它是否被预期是没有意义的,因为它已经被标记为失败。

关于c# - 当违反测试超时时,NUnit 将在内部做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com