我以为我已经理解了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)
你怎么看?怎么了?
一如既往,提前谢谢。
答案 0 :(得分:4)
你要求一种非常特殊的,通常是气馁的模拟形式,称为部分模拟,其中在测试中的方法被模拟。 Spock从0.7开始支持此功能,但您必须创建Spy()
而不是Mock()
。另请注意,您无法模拟私有方法。有关间谍的更多信息,请参阅reference documentation。