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

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

Patricia Arquette
リリース: 2024-10-26 17:32:30
オリジナル
962 人が閲覧しました

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

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