我目前正在考虑如何编写测试来检查给定的代码段是否出现恐慌?我知道 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
恐慌并且我们恢复了,或者该功能是否根本没有恐慌。如何指定在没有恐慌时跳过哪些代码以及在出现恐慌时执行哪些代码?我如何检查我们是否从恐慌中恢复过来了?
原文由 ThePiachu 发布,翻译遵循 CC BY-SA 4.0 许可协议
testing
没有真正的“成功”概念,只有失败。所以你上面的代码是正确的。您可能会发现这种风格稍微清晰一些,但它基本上是一回事。我通常发现
testing
相当弱。您可能对 Ginkgo 等更强大的测试引擎感兴趣。即使你不想要完整的 Ginkgo 系统,你也可以只使用它的匹配器库 Gomega ,它可以与testing
一起使用。 Gomega 包括如下匹配器:您还可以将恐慌检查包装到一个简单的函数中: