В даний час я розмірковую над тим, як написати тести, які перевіряють, чи не панікував певний фрагмент коду? Я знаю, що 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
точно сказати, чи запанікували ми, чи ми одужали, чи функція взагалі не панікувала. Як я можу вказати, який код пропустити, якщо немає паніки, і який код виконати, якщо є паніка? Як я можу перевірити, чи була якась паніка, з якої ми оговтались?