為寫入Stdin 的程式碼編寫Go 測試
為從stdin 讀取並將其回顯到stdout 的程式碼編寫Go 測試,建議將功能隔離到一個單獨的函數中,該函數以io.Reader 和io.Writer 作為參數。
不要直接使用 stdin 和 stdout 執行主函數中的所有操作,您的程式碼應該定義用於此特定目的的函數。例如:
<code class="go">func echo(r io.Reader, w io.Writer) { reader := bufio.NewReader(r) for { fmt.Print("> ", w) bytes, _, err := reader.ReadLine() if err == io.EOF { os.Exit(0) } fmt.Println(string(bytes), w) } }</code>
在主函數中,您可以呼叫echo 函數:
<code class="go">func main() { echo(os.Stdin, os.Stdout) }</code>
要測試此函數,可以建立以下測試:
<code class="go">import ( "bytes" "io" "testing" ) func TestEcho(t *testing.T) { input := "abc\n" expected := "abc\n" r := bytes.NewBufferString(input) w := bytes.NewBufferString("") echo(r, w) if got := w.String(); got != expected { t.Errorf("Expected: %v, Got: %v", expected, got) } }</code>
此測試根據指定的輸入字串建立一個緩衝讀取器和一個緩衝寫入器來擷取輸出。然後它呼叫 echo 函數,傳入 reader 和 writer。最後,它將輸出與預期結果進行比較。
以上是如何測試從 Stdin 讀取並寫入 Stdout 的 Go 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!