Go での stdin/stdout 相互作用のテスト
stdin および stdout と相互作用するアプリケーションを開発する場合、テストを使用して動作を検証することが重要です。プログラムが stdin から行を読み取り、stdout にエコーバックする簡単な例を考えてみましょう。
サブプロセスを含むテスト ケース
最初、テスト ケースは os を使用して作成されました。 /exec を使用してプログラムをサブプロセスとして起動し、stdin および stdout パイプと通信します。ただし、このアプローチでは、main 関数が stdin と stdout を直接使用しているため、テストが失敗します。
ロジックを個別にテストする
この問題に対処するには、コードで次のことを行う必要があります。標準入力/標準出力処理をメイン ロジックから分離するためにリファクタリングする必要があります。 stdin と stdout を表す io.Reader と io.Writer をパラメータとして受け入れる新しい関数を定義できます。この関数は、行の読み取りやエコーなど、目的の操作を実行できます。
改訂されたテスト ケース
<code class="go">func TestEcho(t *testing.T) { in := bufio.NewReader(strings.NewReader("abc\n")) out := &bytes.Buffer{} echo(in, out) got := out.String() want := "abc\n" if got != want { t.Errorf("Wanted: %v, Got: %v", want, got) } }</code>
この改訂されたテスト ケースでは、エコー関数がテストされます。直接。文字列リーダーを使用して関数に入力を提供し、バッファを使用して出力をキャプチャします。予想される出力 (「abcn」) とバッファーから取得された実際の出力を比較することにより、テストでは echo 関数の正しい動作が検証されます。
このアプローチでは、プログラムのロジックのテストと処理の詳細が分離されます。 stdin と stdout を使用して、より信頼性が高く保守しやすいテスト戦略を提供します。
以上がGo アプリケーションで stdin/stdout の相互作用を効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。