NUnit Console Runner可以动态报告失败的测试吗?

时间:2014-10-03 14:38:39

标签: c# nunit nunit-console

nunit-console似乎是这样的(params:/nologo /wait /labels ...

在测试开始时,它仅输出每个测试的标签,如下所示:

***** Our.Tests.Bla
... here come some Console.WriteLine
// Note that in case Our.Tests.Bla fails, nothing is reported here immediately
***** Our.Tests.Blub
... here come some Console.WriteLine
***** Our.Tests.Foo
... here come some Console.WriteLine

如果任何测试失败,它只报告完整运行结束时的测试失败。

通常这很好,但我们也通过NUnit运行一些相互依赖的集成测试,有时一个测试挂起,因为之前的测试失败了。

问题是,当一个测试挂起时,您看不到哪个/以前的测试是否失败,使得快速追踪问题变得更加困难。 (特别是当测试挂在测试服务器计算机上时,或者您可能只有一个中止运行的日志。)

我真的更喜欢让NUnit在开始下一次测试之前立即报告失败的测试,包括详细错误。这可能吗?

4 个答案:

答案 0 :(得分:4)

你可以通过一种方法在你的测试文件中进行拆解,该文件在每次测试完成后运行,如果测试失败,则可以输出测试名称。

    [TearDown]
    public void TearDown()
    {
        var status = TestContext.CurrentContext.Result.Status;
        if(status != TestStatus.Passed)
          Console.WriteLine("Test Failed: {0}", TestContext.CurrentContext.Test.FullName);   
    }

答案 1 :(得分:1)

Another question on here asked about having the console runner halt on the first error that it encountered

/stoponerror选项不是您要求的选项,但它可能会达到您想要的效果。

答案 2 :(得分:1)

此答案基于Andrew's answer

NUnit 3中的某些类已更改,因此TearDown方法也需要更改。结果如下:

[TearDown]
public void TearDown()
{
    var status = TestContext.CurrentContext.Result.FailCount;
    if (status > 0)
        Console.WriteLine("Test Failed: {0}\r\nMessage:\r\n{1}", 
                           TestContext.CurrentContext.Test.FullName, 
                           TestContext.CurrentContext.Result.Message);          
} 

答案 3 :(得分:0)

你可以使用/标签。这至少可以帮助您找到失败的测试。