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

Mary-Kate Olsen
リリース: 2024-11-16 16:48:03
オリジナル
877 人が閲覧しました

How to Capture and Verify Log Output in Go Tests?

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

Go テストでは、関数のログ出力の検証は、特に関数自体がログを記録する場合に困難になることがあります。エラーを直接取得します。

ログ出力をキャプチャするための一般的な解決策は、テスト対象の関数を実行する前にデフォルトのログ出力をバッファにリダイレクトすることです。

例:

次の readByte 関数を考えてみましょう:

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

ログ出力をテストするには、テスト ファイルで次のアプローチを使用できます:

package main

import (
    "bytes"
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    output := buf.String()
    assert.Contains(t, output, "Couldn't read first byte")
}
ログイン後にコピー

この例では、

  • ログ出力をキャプチャするバッファを作成します。
  • log.SetOutput(&buf) を使用してデフォルトのログ出力をバッファにリダイレクトします。
  • 実行readByte 関数。
  • 後続のテストへの影響を防ぐために、defer func() を使用してデフォルトのログ出力を os.Stderr に復元します。
  • testify/assert を使用して予期されるログ メッセージをアサートします。

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

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