【发布时间】:2017-06-01 18:00:03
【问题描述】:
我正在使用 Spring Cloud Contract 为 REST 服务创建存根,以便我可以使用 REST 客户端进行测试。我让存根运行器在 Spring Boot 应用程序中工作,并且一切都按预期工作。我遇到的问题是我想在响应中看到请求的元素,以更好地模拟 REST 服务的最终行为。例如,在这个合同中,我希望请求中“代码”字段中传递的内容在响应中出现反刍:
package contracts
org.springframework.cloud.contract.spec.Contract.make {
request {
method('POST')
url $("/resource")
body ([
code : $(client(regex('[a-zA-Z0-9]{5,32}')))
])
}
response {
status 200
body([
code: ???
])
}
}
显然,输入“代码”可以是任何与正则表达式匹配的内容,因此实际值在运行之前是未知的。有什么可以代替“???”返回请求中提交的代码?我尝试访问,例如:
request.body.serverValue['code']
但该值似乎是在编译时生成的,也许是为了在生成的测试源下的 ContractVerifierTest.java 中自动生成测试。
这可以做到吗?这是对 Spring Cloud Contract 的适当使用吗?
【问题讨论】:
-
我已经更新了答案原因实际上是从 1.1.0 开始你可以做到的。
-
哦,太好了@MarcinGrzejszczak,感谢您的更新!
标签: wiremock spring-cloud-contract