カバレッジ情報を使用した Go での os.Exit シナリオのテスト (Coveralls.io/Goveralls)
この質問は、次のようなテスト ルーチンの課題に対処します。カバレッジ情報が正確にレポートされるようにしながら、Go で os.Exit() を利用します。主な懸念は、バイナリの再呼び出しなどの既存の方法がカバレッジを追跡できないことです。
正確なカバレッジのための修正されたアプローチ
この制限に対処するために、修正されたテストというアプローチが提案されています。バイナリを再度呼び出すのではなく、os.Exit() または log.Fatalf() 関数を変更して終了コードまたはエラー ログをキャプチャすることによってテストが実行されます。
Modified foo/bar.go:
package foo import ( "fmt" "os" ) var osExit = os.Exit func Crasher() { fmt.Println("Going down in flames!") osExit(1) }
変更されたテスト コード: foo/bar_test.go
package foo import "testing" func TestCrasher(t *testing.T) { // Save current function and restore at the end: oldOsExit := osExit defer func() { osExit = oldOsExit }() var got int myExit := func(code int) { got = code } osExit = myExit Crasher() if exp := 1; got != exp { t.Errorf("Expected exit code: %d, got: %d", exp, got) } }
このアプローチにより、カバレッジ ツールが os.Exit() の実行を正確に追跡できるようになり、ルーチンが os.Exit() で終了するテスト ケースが確実にカバーされるようになります。テスト結果。
結論
修正されたアプローチはテストを効果的に組み合わせます終了コードとカバレッジ情報を備え、正確なカバレッジレポートを維持しながら、os.Exit() シナリオを正確にテストするための完全なソリューションを提供します。
以上がGo で `os.Exit()` を正確にテストし、コード カバレッジを維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。