Grails服务的Spock测试中的交互太少

时间:2012-11-27 18:07:56

标签: testing grails service spock

我以为我已经理解了Spock的互动但是我必须管理我仍然缺少一些图片。

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

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

        anotherMethod(myObj)

        //do my stuff again
    }

    void anotherMethod(myObj) {
        // do other stuff
    }
}

我想确保myStuff方法调用anotherMethod,以测试和记录正确的行为。

所以,这是我的Spock规范类中的测试:

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 个答案:

答案 0 :(得分:4)

你要求一种非常特殊的,通常是气馁的模拟形式,称为部分模拟,其中在测试中的方法被模拟。 Spock从0.7开始支持此功能,但您必须创建Spy()而不是Mock()。另请注意,您无法模拟私有方法。有关间谍的更多信息,请参阅reference documentation