2014-09-29 32 views
2

我在這裏有一堆單元測試。其中一個人期望代碼不做任何事情,因爲參數解析不應該工作。重定向控制檯輸出只有一個方法

不幸的是,在這種情況下,我使用的參數解析庫強制Console.Write(),現在我的單元測試輸出中充滿了庫的消息,這使得它很難閱讀。

在調用此方法之前,有沒有方法將標準控制檯輸出重定向爲空(或臨時文件或其他),然後在完成後將其重定向回標準輸出?

謝謝!

更新

其實這是錯誤輸出需要重定向...

回答

4

是的,你可以用自定義一個臨時替代輸出流。可以用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); 
+0

謝謝,它的工作原理:) – thomasb 2014-09-29 08:33:24

+0

@ cosmo0你歡迎 – 2014-09-29 08:33:40

1

您可以創建一個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"); 
+0

太糟糕了,我不能標記接受的兩個答案。謝謝 :) – thomasb 2014-09-29 09:12:45

相關問題