首页 > 解决方案 > 为什么 Spock 不记录由间谍对象的方法完成的调用?

问题描述

我正在使用 Spock 框架的帮助编写一个基于交互的测试,我想在其中检查一个方法是否调用了另一个方法一次。

被测类如下所示:

class ClassUnderTest {
    def a() {
        b()
    }

    def b() {}
}

我的测试用例看起来像这样

class ClassUnderTestTest extends Specification {
    ClassUnderTest cut
    ClassUnderTest spied

    def setup() {
        cut = new ClassUnderTest()
        spied = Spy(cut)
    }

    def "Method a() calls method b()"() {
        when:
        spied.a()

        then:
        1 * spied.a()
        1 * spied.b()
    }
}

运行这个测试,Spock 只识别对 的调用,a()而不是对 的调用b()

我做错了什么或错过了什么?

标签: unit-testinggroovyspockspock-spy

解决方案


您的代码有效,请确保您拥有spock-core当前版本的最新版本2.0-groovy-3.0,您还需要byte-buddy模拟类而不仅仅是接口。


推荐阅读