log.Fatal() を使用した Go 関数のテスト
Go では、log.Fatal() を使用する関数をテストするのが難しい場合があります。 os.Exit(1) を直接呼び出すため、テストが失敗します。この問題を解決する方法は次のとおりです。
log.Logger を継承し、log.Fatal() メソッドをオーバーライドするカスタム ロガーを作成します。
package main import ( "log" "os" ) type TestLogger struct { *log.Logger } func (l *TestLogger) Fatal(v ...interface{}) { l.Output(2, fmt.Sprint(v...)) } func (l *TestLogger) Fatalf(format string, v ...interface{}) { l.Output(2, fmt.Sprintf(format, v...)) }
標準ロガーをカスタム ロガーに置き換えます。テストケース内:
import ( "bytes" "github.com/YourPackage/logging" ) func TestFunctionWithLogFatal(t *testing.T) { buffer := new(bytes.Buffer) testLogger := logging.NewTestLogger(buffer) log.SetOutput(testLogger) // Call the function under test here output := buffer.String() // Assert that the output contains the expected log message }
の log.Fatal() メソッドをオーバーライドすることにより、カスタム ロガーを使用すると、実際にテスト プロセスを終了せずにログ メッセージを処理できます。代わりに、検証のために提供されたバッファ オブジェクトにキャプチャされます。これにより、log.Fatal() を効果的に使用する関数をテストできます。
以上が「log.Fatal()」を使用する Go 関数を効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。