[英]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.