以下是重现此问题的示例程序:
[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吞咽控制台输出?
答案 0 :(得分:4)
这是一个错误,你刚刚发现它!通常需要确认错误,但看到你的例子,我可以准确理解发生了什么。
Throws
创建一个临时测试结果和上下文,我们将其丢弃。如果我们不这样做,抛出的异常将记录在结果中。显然,我们需要从临时结果中保存一些内容,包括文本输出。如果您可以在GitHub上为此提交错误,那将会很酷。
作为解决方法,您可以使用Roman建议的异步委托。如果您这样做,Assert.Throws
将使用不会创建一次性上下文和结果的不同代码。
如果您对此提出错误,我会尝试在此问题上为您提供更好的解决方法。 ; - )
答案 1 :(得分:0)
我有同样的问题,罗马的黑客修复了我的问题。 使用修复程序等待下一个版本:)