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 サイトの他の関連記事を参照してください。