Spock框架中如何正确验证mock方法调用?

问题描述 投票:0回答:1

我正在尝试使用 Spock 框架测试方法,但在验证模拟方法调用时遇到问题。这是我的代码:

package com.workato.agent.smb

import spock.lang.Specification

import java.util.function.Supplier

class SomeSpec extends Specification {

    def "test"() {
        given:
        def resource = "ABC"
        def supp = Mock(Supplier)
        supp.get() >> { args ->
            resource
        }

        when:
        def res = supp.get()

        then:
        res == resource
        // 1 * supp.get()
    }
}

当我取消注释“then”块中的最后一行(

1 * supp.get()
)时,测试失败并出现以下错误:

Condition not satisfied:

res == resource
|   |  |
null|  ABC
false

在调试模式下,当此行取消注释时,闭包内的断点

{args -> resource}
不会触发。

如何正确验证模拟

get()
上的
Supplier
方法被调用一次而不导致测试失败?

groovy spock
1个回答
0
投票

我觉得应该是这样

    def "test"() {
        given:
        def resource = "ABC"
        def supp = Mock(Supplier)

        when:
        def res = supp.get()

        then:
        res == resource
        1 * supp.get() >> resource
    }
© www.soinside.com 2019 - 2024. All rights reserved.