NUnit控制台运行程序可以实时报告失败的测试

本文关键字:报告 失败 测试 实时 控制台 运行 程序 NUnit | 更新日期: 2023-09-27 18:25:25

nunit-console似乎是这样工作的(参数:/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在开始下一个测试之前立即报告失败的测试,包括详细的错误。这可能吗

NUnit控制台运行程序可以实时报告失败的测试

实现这一点的一种方法是在测试文件中有一个Teardown,它在每个测试完成时运行,如果测试失败,它可以输出测试的名称。

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

这里的另一个问题是关于控制台运行程序在遇到第一个错误时停止的问题。

/stoponerror选项不是你想要的,但它可能会和你想要的一样好。

这个答案基于Andrew的答案

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);          
} 

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