panicが発生するコードをテストする際に、どのように書けばいいのか分からなかった。
deferで指定した関数はpanic発生後も実行されるので、その関数内でrecover()
する事でテスト出来る事を知ったので記録しておく。
recover()
の戻り値にはpanic
が発生した時に渡された文字列が返るためその値をチェックする事で判別ができる。
panic.go
package panic
func SuccessOrPanic(isSuccess bool) bool {
// 何かしらの判定
if isSuccess {
return true
}
panic("illegal processing")
}
panic_test.go
package panic_test
import "testing"
func TestSuccessOrPanic(t *testing.T) {
defer func() {
err := recover()
if err != "illegal processing" {
t.Errorf("got %v\nwant %v", err, "illegal processing")
}
}()
SuccessOrPanic(false)
}