ホームページ  >  記事  >  バックエンド開発  >  Stdin から読み取る Go アプリケーションをテストする方法: モック リーダーとライターを含むガイド

Stdin から読み取る Go アプリケーションをテストする方法: モック リーダーとライターを含むガイド

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 17:32:30888ブラウズ

How to Test Go Applications That Read from Stdin: A Guide with Mock Readers and Writers

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

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