ホームページ >バックエンド開発 >Golang >Go 単体テストでパニックを効果的にテストするにはどうすればよいですか?

Go 単体テストでパニックを効果的にテストするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 12:30:15773ブラウズ

How Can I Effectively Test for Panics in Go Unit Tests?

Go でのパニックのテスト: 実践ガイド

Go で単体テストを作成する場合、多くの場合、特定のコード パスがパニックをトリガーするかどうかを確認する必要があります。 Go はパニックを処理するためにリカバリと呼ばれるメカニズムを提供しますが、特にパニック発生時にコードをスキップまたは実行する方法を指定するための直接のサポートは提供しません。

この制限を克服するには、この微妙な機能を利用できます。テストは成功の概念を定義するのではなく、失敗だけを定義します。これを利用して、テストを次のように構成できます。

func TestPanic(t *testing.T) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()

    // The following is the code under test
    OtherFunctionThatPanics()
}

この例では、OtherFunctionThatPanics がパニックにならない場合、recover 関数は nil を返し、呼び出しによりテストは失敗します。 t.Errorf に。パニックが発生した場合は、回復がそれをキャプチャし、テストは合格します。

または、パニック チェック ロジックを抽象化するヘルパー関数を作成することもできます。

func assertPanic(t *testing.T, f func()) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()
    f()
}

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}

これこのアプローチは、Go でパニック テストを処理するための簡潔で再利用可能な方法を提供します。

以上がGo 単体テストでパニックを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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