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