簡體   English   中英

當 function 必須寫入標准輸出時,我如何對 C# function 進行單元測試

[英]How do I unit test a C# function when that function must write to stdout

我有一個 function,其規范要求它寫入標准輸出。 當我測試時,stdout 是 MIA,我找不到它。 我需要抓住它,這樣我才能斷言預期的響應。 該方法將由命令管道調用。

另外,我會寫一些管道函數:==stdin==>方法==stdout==>。 這意味着我的單元測試需要將測試數據推送到標准輸入。

我正在編寫方法之前計划測試場景,但沒有找到很多最新信息。 我希望 MSTest 可能有一些幫助方法。 如果沒有,我可以使用一些關於如何編寫自己的 go 的指導。

我建議傳入一個TextReader和一個TextWriter ,也許作為可選參數。 然后,您可以從讀取器讀取並寫入寫入器。 然后調用者傳入Console.OutConsole.In ,或者您可以在方法中執行此操作:

public void Foo(TextReader reader = null, TextWriter writer = null)
{
    reader = reader ?? Console.In;
    writer = writer ?? Console.Out;
    // Read and write
}

(或者使用一個無參數的重載來調用帶有兩個必需參數的重載。)

在您的單元測試中,使用StringReaderStringWriter

如果您可以要求調用者傳入讀取器和寫入器,它將允許您避免將代碼緊密耦合到控制台,從而導致代碼通常更清潔 - 我可以想象一系列方法都接受讀取器/ writer(或為它們使用字段),以便只有最頂層的代碼“知道”它正在處理控制台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM