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

Patricia Arquette
リリース: 2024-10-27 05:20:03
オリジナル
849 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート