我正在尝试测试一个注入了RestClient的Groovy类。
class MyService {
def restClient
def put() {
restClient.put(
path: "foo",
contentType: "XML",
body: { foo { bar(baz) }}
)
}
}
这在手动测试中可行。
我想用Spock测试它:
@TestFor(MyService)
class MyServiceSpec extends Specification {
RESTClient restClient = Mock()
def setup() {
service.restClient = restClient
}
def "posts to restClient"() {
when:
service.put()
then:
1 * service.restClient.put([
path: "foo",
contentType: "XML",
body: { foo { bar(baz) }}
])
}
}
失败:Spock不考虑匹配的参数。我如何让Spock认识到他们是相同的论点?
(Grails 2.3.11)
更新:我认为问题的核心是{ foo() } == { foo() }
是错误的。 How to assert equality of two closures
我看到我可以捕获Spock中的闭包,从闭包构建XML并比较XML对象。什么是简洁易懂的方法来实现这一目标?
答案 0 :(得分:0)
你可以在Spock中使用_(非核心算子)来匹配“任何东西”
then:
1 * service.restClient.put(_)
应该可以正常工作