【问题标题】:UnitTestOutcome.Timeout equivalent in NUNITNUNIT 中的 UnitTestOutcome.Timeout 等效项
【发布时间】:2018-04-18 23:22:19
【问题描述】:

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

testContext.CurrentTestOutcome.Equals(UnitTestOutcome.Timeout)

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

【问题讨论】:

    标签: nunit mstest


    【解决方案1】:

    这个问题并不完全清楚。 @Francesco B. 已经将其解释为“如何指定超时?”并做出相应的回答。

    我理解您在问“我如何才能检测到我的测试已超时?”简短的回答 - 您无法在测试本身中检测到它。它只能被正在执行您的测试的跑步者检测到。

    更长的答案...

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

    但是,您永远不会看到“超时”的结果,因为...

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

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

    【讨论】:

    • 非常感谢@charlie 对 TimeOut 如何与 NUnit 配合使用进行了如此详细的描述。我想我需要实现一些替代方法来处理 NUnit 中的超时。来到我的问题,没有你的理解是正确的,我想检查测试结果的结果为 TimeOut 然后执行一些操作,类似于下面的代码 sn-p if(testContext.CurrentTestOutcome.Equals(UnitTestOutcome.Timeout)) { Console.WriteLine("超时测试结果" + testContext.CurrentTestOutcome); }
    【解决方案2】:

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

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

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

    有一个已知的“罕见”情况,即 NUnit 不遵守超时,这已经是 discussed

    【讨论】:

    • 请注意,“罕见情况”仅适用于 NUnit V2 的 ExpectedExceptionAttribute,在 NUnit 3 中不再存在。
    • @Charlie 我仍然对你可以在 StackOverflow 上“认识”的非凡(而且通常也非常善良)的人感到惊讶 :)
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2011-02-19
    • 2013-12-16
    相关资源
    最近更新 更多