Obecnie zastanawiam się, jak napisać testy, które sprawdzą, czy dany fragment kodu wpadł w panikę? Wiem, że Go używa recover
do łapania paniki, ale w przeciwieństwie do, powiedzmy, kodu Java, nie możesz tak naprawdę określić, który kod powinien zostać pominięty w przypadku paniki lub co masz. Więc jeśli mam funkcję:
func f(t *testing.T) {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
OtherFunctionThatPanics()
t.Errorf("The code did not panic")
}
Naprawdę nie mogę powiedzieć, czy OtherFunctionThatPanics
spanikowaliśmy i doszliśmy do siebie, czy też funkcja w ogóle nie panikowała. Jak określić, który kod ma zostać pominięty, jeśli nie ma paniki, i który kod wykonać w przypadku wystąpienia paniki? Jak mogę sprawdzić, czy była jakaś panika, po której wyleczyliśmy się?