繁体   English   中英

NUnit声明抛出控制台输出

[英]NUnit Assert.Throws swallows console output

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

[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吞噬Console输出?

这是一个错误,您才发现它! 通常需要确认错误,但是看到您的示例,我可以确切地了解正在发生的事情。

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

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

如果您对此提交了错误,我将尝试为您提供一个更好的解决方案。 ;-)

我有同样的问题,Roman的破解解决了我的问题。 等待修复的下一个版本:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM