我正在尝试测试一个使用闭包进行调用的方法,如下所示:
dd($store)
我想测试def foo(Long param) {
AnObject.doSomething {
bar(param)
}
}
是否使用一个调用doSomething
并且内部具有预期值的闭包调用。
我可以通过创建间谍并执行
来正确测试bar
调用
doSomething
但是,我似乎无法找到一种方法来对闭包的内容执行断言。
使用1L调用封闭when:
service.foo(1L)
then:
1 * AnObject.doSomething{_}
内部的适当方法是什么?
答案 0 :(得分:0)
如果没有看到更多代码,我认为您需要监视提供bar方法的类。这有点做作,因为测试提供了闭包,但我认为它是这样的:
import spock.lang.Specification
class Bar {
void bar(def param) {
println param
}
}
class DoSomethingTestSpec extends Specification {
class AnObject {
void doSomething(Closure c) {
def param = 1L
c.call(param)
}
}
def "test AnObject doSomething calls the closure"() {
given:
def closure = { def p ->
Bar.bar(p)
}
and:
GroovySpy(Bar, global:true)
and:
AnObject anObject = new AnObject()
when:
anObject.doSomething(closure)
then:
1 * Bar.bar(_) >> { args ->
assert args[0] == 1L
}
}
}