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