тестирование на панику в Go
При написании тестов в Go, проверка на панику может быть полезной методикой. Однако, в отличие от Java, Go не имеет явного синтаксиса для выборочного обработки паники. defer func () { Если r: = record (); r! = nil { fmt.println ("восстановлен в f", r) } } () Другое функция, что накатана () t.errorf («Код не паниковал») }
Этот код пытается восстановить из любой паники в других функциях, что использует функцию восстановления. Тем не менее, может быть сложно определить, вообще ли функция паниковала или не произошла паника. Это может быть достигнуто путем инвертирования логики и обеспечения того, чтобы паника произошла, если ожидается:
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") }
дополнительно, более продвинутые структуры тестирования, такие как Ginkgo или Gomega, предоставляют встроенные совпадения для утверждения паники:
ждать (другие функции, что функции). Создайте универсальную функцию для утверждения паники: func assertpanic (t *testing.t, f func ()) { defer func () { Если r: = record (); r == nil { t.errorf («Код не паниковал») } } () f () }
эта функция можно использовать следующим образом:
]func TestPanic(t *testing.T) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() // Code under test OtherFunctionThatPanics() }]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3