我在這裏有一堆單元測試。其中一個人期望代碼不做任何事情,因爲參數解析不應該工作。重定向控制檯輸出只有一個方法
不幸的是,在這種情況下,我使用的參數解析庫強制Console.Write()
,現在我的單元測試輸出中充滿了庫的消息,這使得它很難閱讀。
在調用此方法之前,有沒有方法將標準控制檯輸出重定向爲空(或臨時文件或其他),然後在完成後將其重定向回標準輸出?
謝謝!
更新
其實這是錯誤輸出需要重定向...
我在這裏有一堆單元測試。其中一個人期望代碼不做任何事情,因爲參數解析不應該工作。重定向控制檯輸出只有一個方法
不幸的是,在這種情況下,我使用的參數解析庫強制Console.Write()
,現在我的單元測試輸出中充滿了庫的消息,這使得它很難閱讀。
在調用此方法之前,有沒有方法將標準控制檯輸出重定向爲空(或臨時文件或其他),然後在完成後將其重定向回標準輸出?
謝謝!
其實這是錯誤輸出需要重定向...
是的,你可以用自定義一個臨時替代輸出流。可以用Console.SetOut()方法完成。更多或更少(適應你的實際代碼,也見註釋):
// We're not interested in its output, a NULL fake one may also work (better)
Console.SetOut(new StringWriter());
// Your code here...
// Now you have to restore default output stream
var standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
UPDATE:根據您的更新(重定向標準錯誤流),你只需用*Error
更換*Out
:
Console.SetError(new StringWriter());
// Your code here...
var standardError = new StreamWriter(Console.OpenStandardError());
standardError.AutoFlush = true;
Console.SetError(standardError);
您可以創建一個TextWriter
,什麼也不做:
public sealed class NulTextWriter: TextWriter
{
public override Encoding Encoding
{
get
{
return Encoding.UTF8;
}
}
}
然後,你可以設置和恢復控制檯輸出像這樣:
Console.WriteLine("Enabled");
var saved = Console.Out;
Console.SetOut(new NulTextWriter());
Console.WriteLine("This should not appear");
Console.SetOut(saved);
Console.WriteLine("Restored");
您可以使用控制檯的錯誤輸出相同的方法:
Console.Error.WriteLine("Enabled");
var saved = Console.Error;
Console.SetError(new NulTextWriter());
Console.Error.WriteLine("This should not appear");
Console.SetError(saved);
Console.Error.WriteLine("Restored");
太糟糕了,我不能標記接受的兩個答案。謝謝 :) – thomasb 2014-09-29 09:12:45
謝謝,它的工作原理:) – thomasb 2014-09-29 08:33:24
@ cosmo0你歡迎 – 2014-09-29 08:33:40