ホームページ >バックエンド開発 >Golang >Stdin から読み取って Stdout に書き込む Go コードをテストするにはどうすればよいですか?

Stdin から読み取って Stdout に書き込む Go コードをテストするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 05:20:03891ブラウズ

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

Stdin に書き込むコードの Go テストの作成

stdin から読み取り、stdout にエコーバックするコードの Go テストを作成するにはio.Reader と io.Writer をパラメーターとして受け取る別個の関数に機能を分離することをお勧めします。

stdin と stdout を直接使用して main 関数のすべての操作を実行する代わりに、コードで次の定義を行う必要があります。この特定の目的のための関数。例:

<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 関数を呼び出して、リーダーとライターを渡します。最後に、出力と期待される結果を比較します。

以上がStdin から読み取って Stdout に書き込む Go コードをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。