我正在尝试使用 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
方法被调用一次而不导致测试失败?
我觉得应该是这样
def "test"() {
given:
def resource = "ABC"
def supp = Mock(Supplier)
when:
def res = supp.get()
then:
res == resource
1 * supp.get() >> resource
}