当前位置: 首页 > 知识库问答 >
问题:

如何测试恐慌?

马边浩
2023-03-14

我目前正在考虑如何编写测试来检查给定的代码是否出现了恐慌?我知道Go使用recovere来捕捉恐慌,但与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是否发生了恐慌,我们恢复了,或者函数是否根本没有恐慌。如何指定在没有恐慌的情况下跳过哪些代码,以及在出现恐慌的情况下执行哪些代码?我如何检查我们是否从恐慌中恢复过来?

共有1个答案

郭华美
2023-03-14

测试实际上没有“成功”的概念,只有失败。所以上面的代码是正确的。您可能会发现这种风格稍微清晰一些,但基本上是一样的。

func TestPanic(t *testing.T) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()

    // The following is the code under test
    OtherFunctionThatPanics()
}

我通常发现测试相当薄弱。您可能会对更强大的测试引擎感兴趣,比如Ginkgo。即使您不想要完整的Ginkgo系统,也可以使用它的匹配器库Gomega,该库可以与testing一起使用。Gomega包括匹配者,如:

Expect(OtherFunctionThatPanics).To(Panic())

您还可以将恐慌检查封装成一个简单的函数

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}

func assertPanic(t *testing.T, f func()) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()
    f()
}
 类似资料:
  • Some quick examples for techniques for testing. 合约事件Testing ERC-20 Transfer Event describe('Events', async function() { it('triggers a Transfer event', function() { let contract = new Con

  • 我对还很陌生。所以,请把剑给我(如果可能的话)。 我试图通过学习这里的教程从web上获取数据 在问之前,我看了很多参考资料,比如: 博客延迟,恐慌和恢复 在Goroutines中处理恐慌 how-show-i-write-goroutine 还有几个,但我想不通。 以下是你不想去游乐场的代码(原因尚不为人所知): 我将代码修改为(假设)处理goroutine中的错误,如下所示(go-playgro

  • 问题内容: 考虑以下linux内核转储堆栈跟踪,您可以通过调用从内核源代码触发恐慌: 在什么主张? 我怎么看C的C代码? 如何解释恐慌的内容? 问题答案: 这只是一个普通的回溯,这些函数以相反的顺序调用(第一个调用的函数由上一个调用,依此类推): 该是符号+偏移/长度有关于更多的信息,了解内核哎呀,以及如何可以调试内核哎呀。还有关于调试内核的出色教程 注意:按照Eugene的建议,您可能要先尝试a

  • 我试图用Jasmine为Angularjs编写单元测试。这是我的控制器: 和测试 测试失败,即使我试图测试期望(true). toBe(true); 茉莉花,因果报应,棱角分明的嘲弄都在我的索引里。jasmine调试页面中的html,还有测试脚本。 我发现如果删除beforeach()块,expect(true)。托比(真的)通过了。 下面是一个错误:

  • 在Android Espresso测试中有什么好的方法来测试结果代码和数据吗?我在用浓缩咖啡2.0。 定义一个新方法,如并使用该方法以便可以截获,等等。 编写一个只用于测试的TestActivity,它将调用上的,并在中检查结果 试着思考这两个坏处中什么是较小的,或者是否有任何其他关于如何测试这一点的建议。有什么建议吗?谢了!