在我们的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(_)
}

10-06 13:00