В настоящее время я размышляю над тем, как писать тесты, которые проверяют, запанился ли данный фрагмент кода? Я знаю, что Go использует recover
, чтобы поймать панику, но, в отличие от, например, кода Java, вы не можете точно указать, какой код следует пропустить в случай паники или что у вас есть. Поэтому, если у меня есть функция:
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")
}
Я не могу сказать, паниковал ли OtherFunctionThatPanics
, и мы восстановились, или если функция не паниковала вообще. Как указать, какой код пропустить, если нет паники и какой код выполнить, если есть паника? Как я могу проверить, была ли какая-то паника, которую мы вызвали?