在我们的Spock测试中,我们要检查是否在我们的软件中选择了正确的路径。但是我们不想测试被调用方法的功能(这是在单独的测试中完成的)
def "Test"() {
setup:
service.metaClass.innerMethod = { -> return null }
when:
service.doSomething("[email protected]")
then:
1 * service.innerMethod(*_)
}
该测试始终失败,因为调用了
innerMethod
中的代码,并且计算了innerMethod
中的方法调用的调用,而不是方法innerMethod
的调用| Too few invocations for:
1 * service.innerMethod(*_) (0 invocations)
Unmatched invocations (ordered by similarity):
1 * secondService.doSomething()
我怎样才能得到innerMethod的调用并模拟完整的函数呢?
最佳答案
如果您不是在模拟服务本身,则需要执行以下操作(请注意在使用metaClass时传递正确的参数:
def "Test"() {
setup:
def calls = 0
service.metaClass.innerMethod = { p1 -> calls++ }
when:
service.doSomething("[email protected]")
then:
calls==1
}
如果您 mock 该服务,
def "Test"() {
when:
service.doSomething("[email protected]")
then:
1 * service.innerMethod(_)
}