UnitTestOutcome.Timeout 等效于 NUNIT

UnitTestOutcome.Timeout equivalent in NUNIT

我正在将我们的项目从 MSTest 迁移到 NUnit。 我有一个场景需要执行以下条件

testContext.CurrentTestOutcome.Equals(UnitTestOutcome.Timeout)

能否推荐与 MSTest UnitTestOutcome.Timeout 等效的 NUnit?

根据 official documentation,您可以使用 Timeout 属性:

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

当然,您必须提供以毫秒为单位的超时值;超过该限制,您的测试将被列为失败。

有一个已知的 "rare" 案例,其中 NUnit 不遵守超时,这已经 discussed

问题不是很清楚。 @Francesco B. 已经将其解释为 "How can I specify a timeout?" 的意思并做出了相应的回答。

我理解你在问 "How can I detect that my test has timed out?" 简短的回答 - 你无法在测试本身中检测到它。它只能由正在执行您的测试的运行程序检测到。

更长的答案...

您可以检查拆解中的测试上下文,以查看使用 TestContext.CurrentContext.Result.Outcome 的测试结果。如果您的拆解需要知道测试失败,这将很有用。

但是,您永远不会看到 "timed out" 的结果,因为...

  1. 您的拆解包含在由 Timeout 属性计时的内容中。
  2. 如果测试方法触发超时,您的拆解将不会被调用。
  3. 即使前两点不正确,也没有 "timed out" 结果。测试被标记为失败,只有消息表明它已超时。

当然,如果我误解了问题而你只是想知道如何指定超时,其他答案就是你想要的。 :-)