ホームページ > バックエンド開発 > Golang > Go テストでログ出力をキャプチャしてテストする方法は?

Go テストでログ出力をキャプチャしてテストする方法は?

Susan Sarandon
リリース: 2024-11-15 02:25:02
オリジナル
225 人が閲覧しました

How to Capture and Test Log Output in Go Tests?

Go テストでのログ出力へのアクセス

Go では、ログ パッケージを使用してメッセージをログに記録する便利な方法が提供されます。ただし、ログ メッセージを生成するコードと対話するテストを作成する場合、これらのメッセージのテストが困難になる可能性があります。

エラーが発生したときにログを記録する次の関数 readByte について考えてみましょう。

func readByte(/*...*/) {
    // ...
    if err != nil {
        fmt.Println("ERROR")
        log.Print("Couldn't read first byte")
        return
    }
    // ...
}
ログイン後にコピー

In対応するテスト ファイルを使用して、次を使用してエラー出力を検証することもできます。

c.Assert(OUTPUT, check.Matches, "teste")
ログイン後にコピー

ただし、このアプローチは OUTPUT が存在しないため機能しません。変数はログ バッファーにアクセスできません。これを解決するには、テスト中にログ出力をキャプチャする方法を採用できます。

ログ出力のキャプチャ

ログ出力をキャプチャする 1 つの方法は、ログ出力を一時的にリダイレクトすることです。ログが出力される標準出力。これは、次の例に示すように、log.SetOutput 関数を通じて実現できます。

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    // Update output to write to the buffer
    log.SetOutput(&buf)
    // Reset output to original after test
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    // Verify the buffer contains the expected log message
    t.Log(buf.String())
}
ログイン後にコピー

テストを実行すると、次のような出力が生成されます。

ERROR
Couldn't read first byte
ログイン後にコピー

これは、次の例で示すように、 Go テスト内のログ出力に効果的にアクセスして検証できるため、ログを生成するコードの動作を徹底的にテストできます。

以上がGo テストでログ出力をキャプチャしてテストする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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