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