[英]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.Out
和Console.In
,或者您可以在方法中執行此操作:
public void Foo(TextReader reader = null, TextWriter writer = null)
{
reader = reader ?? Console.In;
writer = writer ?? Console.Out;
// Read and write
}
(或者使用一個無參數的重載來調用帶有兩個必需參數的重載。)
在您的單元測試中,使用StringReader
和StringWriter
。
如果您可以要求調用者傳入讀取器和寫入器,它將允許您避免將代碼緊密耦合到控制台,從而導致代碼通常更清潔 - 我可以想象一系列方法都接受讀取器/ writer(或為它們使用字段),以便只有最頂層的代碼“知道”它正在處理控制台。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.