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

对于Grails服务来说,Spock测试中的交互太少

淳于星宇
2023-03-14

我以为我已经理解了斯波克的交互,但我必须管理,我仍然错过了一些部分的图片。

好了,这里是我的问题:我在Grails服务中有一个方法,它执行一些操作,包括调用同一个服务类的void方法。代码如下:

class myService {
    void myStuff(def myObj, params) {
        // do my stuff

        anotherMethod(myObj)

        //do my stuff again
    }

    void anotherMethod(myObj) {
        // do other stuff
    }
}
void 'test myStuff method'() {
    given: 'my object and some params'    
        // doesn't really matter what I'm doing here
        MyObject myObj = new MyObject()
        params = [title: 'my object']

    when: 'we call myStuff()'
        service.myStuff(myObj, params)

    then: 'anotherMethod() is called exactly one times'
        1 * service.anotherMethod(myObj)
    }
}
Too few invocations for:

1 * service.anotherMethod(myObj)   (0 invocations)

你觉得呢?怎么了?

一如既往,提前感谢。

共有1个答案

夹谷鸿福
2023-03-14

您要求的是一种非常特殊的、通常不受欢迎的模拟形式,称为部分模拟,在这种模拟中,被测试类上的方法被模拟。Spock从0.7开始就支持这一点,但是您必须创建spy()而不是mock()。还要注意,您不能模拟私有方法。有关间谍的更多信息,请参见参考文档。

 类似资料: