在Go 中測試stdin/stdout 互動
開發與stdin 和stdout 互動的應用程式時,使用測試驗證其行為至關重要。讓我們考慮一個簡單的範例,其中程式從 stdin 讀取行並將其回顯到 stdout。
帶有子進程的測試案例
最初,使用 os 編寫了一個測試案例/exec 將程式啟動為子進程並與其 stdin 和 stdout 管道通訊。但是,由於 main 函數直接使用 stdin 和 stdout,這種方法導致測試失敗。
單獨測試邏輯
要解決此問題,程式碼應該進行重構,將 stdin/stdout 處理與主邏輯分開。可以定義一個新函數,它接受 io.Reader 和 io.Writer 作為參數,代表 stdin 和 stdout。此函數可以執行所需的操作,例如讀取和回顯行。
修訂的測試用例
<code class="go">func TestEcho(t *testing.T) { in := bufio.NewReader(strings.NewReader("abc\n")) out := &bytes.Buffer{} echo(in, out) got := out.String() want := "abc\n" if got != want { t.Errorf("Wanted: %v, Got: %v", want, got) } }</code>
在這個修訂的測試用例中,測試了 echo 功能直接地。它使用字串讀取器向函數提供輸入,並使用緩衝區捕獲輸出。透過將預期輸出(“abcn”)與從緩衝區獲得的實際輸出進行比較,測試驗證了 echo 函數的正確行為。
這種方法將程式邏輯的測試與處理細節分開stdin 和 stdout,提供更可靠、可維護的測試策略。
以上是如何有效測試 Go 應用程式中的 stdin/stdout 互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!