NUnit Assert.Throws吞下控制台输出

时间:2018-01-25 23:09:48

标签: c# nunit assertions

以下是重现此问题的示例程序:

[TestFixture] // NUnit ver. 3.9
public class IssueTest
{
    [Test]
    public void AssertThrowsConsoleIssue()
    {
        Console.WriteLine(1);
        Assert.Throws<Exception>(() =>
        {
            Console.WriteLine(2);
            throw new Exception("test");
        });
        Console.WriteLine(3);
    }
}

我希望输出为

1
2
3

但实际上它是

1
3

我在调试单元测试时发现了这个问题,并注意到某些控制台日志输出丢失了。

至于我,这看起来像一个错误。有没有办法阻止Assert.Throws吞咽控制台输出?

2 个答案:

答案 0 :(得分:4)

这是一个错误,你刚刚发现它!通常需要确认错误,但看到你的例子,我可以准确理解发生了什么。

Throws创建一个临时测试结果和上下文,我们将其丢弃。如果我们不这样做,抛出的异常将记录在结果中。显然,我们需要从临时结果中保存一些内容,包括文本输出。如果您可以在GitHub上为此提交错误,那将会很酷。

作为解决方法,您可以使用Roman建议的异步委托。如果您这样做,Assert.Throws将使用不会创建一次性上下文和结果的不同代码。

如果您对此提出错误,我会尝试在此问题上为您提供更好的解决方法。 ; - )

答案 1 :(得分:0)

我有同样的问题,罗马的黑客修复了我的问题。 使用修复程序等待下一个版本:)