ホームページ >バックエンド開発 >Golang >Go で `os.Exit()` を正確にテストし、コード カバレッジを維持するにはどうすればよいですか?

Go で `os.Exit()` を正確にテストし、コード カバレッジを維持するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 10:19:09213ブラウズ

How Can I Accurately Test `os.Exit()` in Go and Maintain Code Coverage?

カバレッジ情報を使用した 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 サイトの他の関連記事を参照してください。

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