ホームページ >バックエンド開発 >Golang >Go テストでログをキャプチャして検査するにはどうすればよいですか?

Go テストでログをキャプチャして検査するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-21 02:18:11382ブラウズ

How to Capture and Inspect Logs in Go Tests?

Go テストでのログのキャプチャと検査

テスト対象の関数によって生成されたログを検証するには、ログをキャプチャして検査することが不可欠です。これは、出力をリダイレクトし、期待値と比較することで実現できます。

この例では、readByte 関数はログ メッセージを標準出力に出力します。テストでこれらのメッセージをキャプチャするには、以下に示すように bytes.Buffer を利用できます。

package main

import (
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
    "testing"
)

func readByte(/*...*/) {
    // ...
    if err != nil {
        fmt.Println("ERROR")
        log.Print("Couldn't read first byte")
        return
    }
    // ...
}

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    t.Log(buf.String())
}

説明:

  • log.SetOutput( &buf) 行は、ログ出力を buf 変数にリダイレクトします。
  • 遅延log.SetOutput(os.Stderr) は、テストの実行後にログ出力が元の宛先に復元されることを保証します。
  • t.Log(buf.String()) 行は、キャプチャされたログをテスト ログに出力します。 .

buf の内容を調べることで、予期したログが readByte 関数によって生成されたかどうかを確認できます。このアプローチにより、テスト対象の関数のコードを変更せずにログ出力をテストできます。

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

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