2

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 在开始下一个测试之前即时/立即报告失败的测试,包括详细的错误。这可能吗?

4

4 回答 4

4

您可以这样做的一种方法是在测试文件中进行 Teardown,该文件在每次测试完成时运行,然后如果测试失败,则可以输出测试的名称。

    [TearDown]
    public void TearDown()
    {
        var status = TestContext.CurrentContext.Result.Status;
        if(status != TestStatus.Passed)
          Console.WriteLine("Test Failed: {0}", TestContext.CurrentContext.Test.FullName);   
    }
于 2014-11-05T01:48:58.153 回答
1

此处的另一个问题询问有关让控制台运行程序在遇到的第一个错误时停止

/stoponerror选项不是您所要求的,但它可能会与您获得的一样好。

于 2014-10-03T15:03:36.250 回答
1

这个答案基于安德鲁的答案

一些类在 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);          
} 
于 2015-11-03T17:49:44.860 回答
0

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

于 2017-11-22T21:32:50.343 回答