首頁 >後端開發 >Golang >如何測試從 Stdin 讀取並寫入 Stdout 的 Go 程式碼?

如何測試從 Stdin 讀取並寫入 Stdout 的 Go 程式碼?

Patricia Arquette
Patricia Arquette原創
2024-10-27 05:20:03899瀏覽

How to Test Go Code that Reads from Stdin and Writes to Stdout?

為寫入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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn