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