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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 04:05:13265ブラウズ

How Can I Effectively Test Panic Behavior in Go?

Go でのパニック動作のテスト

パニック処理を検証するテストを作成する場合、パニックが正常に発生したかどうかを判断するのが難しい場合があります。テスト対象の関数はまったくパニックを起こしませんでした。 Go の回復関数を使用すると、パニックをキャッチできますが、パニックの有無に応じて実行するコードを指定する機能がありません。

従来のテスト アプローチ

1一般的なアプローチは、defer ステートメントを使用して、パニックをチェックするリカバリ関数を登録することです。

func TestPanic(t *testing.T) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
        }
    }()
    OtherFunctionThatPanics()
    t.Errorf("The code did not panic")
}

Thisただし、このアプローチでは、パニックの成功とパニックが発生していないことを明確に区別しません。

Ginkgo または Gomega の使用

より堅牢なテストを行うには、Ginkgo や Gomega などのライブラリの使用を検討してください。ゴメガ。 Gomega は次のようなマッチャーを提供します。

Expect(OtherFunctionThatPanics).To(Panic())

このマッチャーは、テスト対象の関数がパニックする必要があることを明示的にアサートします。

パニック アサーション用のカスタム関数

パニックを簡素化するカスタム関数を作成することもできますチェック:

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

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

この関数はリカバリ関数をラップし、パニックが発生したかどうかを明確に示します。

これらのアプローチを利用することで、Go でパニック動作を効果的にテストできます。コードを作成し、実行中にエラーが発生したときに望ましい動作が確実に達成されるようにします。

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

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