Stdin に書き込む Go アプリケーションのテスト
このガイドでは、stdin 読み取りアプリケーションと対話する Go テスト ケースの作成方法を説明します。以下のサンプル アプリケーションを考えてみましょう。
<code class="go">package main import ( "bufio" "fmt" "io" "os" ) func main() { reader := bufio.NewReader(os.Stdin) for { fmt.Print("> ") bytes, _, err := reader.ReadLine() if err == io.EOF { os.Exit(0) } fmt.Println(string(bytes)) } }</code>
テスト ケースの作成
このアプリケーションの標準入力機能をテストするには、io.Reader から読み取る別の関数を定義します。そして、io.Writer に書き込みます:
<code class="go">func testFunction(input io.Reader, output io.Writer) { // Your test logic here... }</code>
main 関数の変更
main 関数では、stdin と stdout を引数として testFunction を呼び出します。
<code class="go">func main() { testFunction(os.Stdin, os.Stdout) }</code>
テスト ケースの作成
このテスト ケースでは、モック io.Reader と io.Writer を使用して testFunction を直接テストできるようになりました:
<code class="go">func TestInput(t *testing.T) { input := "abc\n" output := &bytes.Buffer{} inputReader := bytes.NewReader([]byte(input)) testFunction(inputReader, output) if got := output.String(); got != input { t.Errorf("Wanted: %v, Got: %v", input, got) } }</code>
このアプローチを使用すると、メイン関数の stdin および stdout 管理の複雑さからテスト ロジックを分離し、stdin に書き込むアプリケーションを効果的にテストできます。
以上がStdin から読み取る Go アプリケーションをテストする方法: モック リーダーとライターを含むガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。