如何解决Spring Cloud Contract、body 和 execute 方法未验证响应
我有以下 Spring Cloud 合同:
package contracts.teams
import org.springframework.cloud.contract.spec.Contract
Contract.make {
name"d Find team roles by filters"
description "Find team roles by filters"
request {
method "POST"
url "api/team/findTeamRolesByFilters"
headers {
contentType applicationjson()
accept applicationjson()
header"Authorization",execute('bearerOfAccesstoken()')
}
body execute('getRequestForFindTeamRolesByFilters()')
}
response {
status OK()
headers {
contentType applicationjson()
}
body execute('getResponseForFindTeamRolesByFilters()')
}
}
我在响应中调用 getResponseForFindTeamRolesByFilters() 以便从服务器生成动态响应。例如,原因可能是来自数据库的自动生成的 id。 从 getResponseForFindTeamRolesByFilters() 生成的字符串是一个有效的 JSON,不幸的是它被忽略并在测试运行时始终返回 true。
当我用如下所示的静态响应替换 execute 方法时,我注意到了这一点:
"""
{
"success": "false"
}
"""
在这种情况下,响应被正确验证,如果不匹配则测试失败。 我所说的得到了测试生成的代码的确认,如下所示:
// then:
assertthat(response.statusCode()).isEqualTo(200);
assertthat(response.header("Content-Type")).matches("application/json.*");
// and:
DocumentContext parsedJson = JsonPath.parse(response.getBody().asstring());
getResponseForFindTeamRolesByFilters();
我应该如何让测试检查动态 json 响应? 谢谢!
解决方法
我在响应中调用 getResponseForFindTeamRolesByFilters() 以便从服务器生成动态响应。
你不应该这样做。合同测试不应访问数据库。
为了消费者,你应该这样做
request {
method "POST"
url "api/team/findTeamRolesByFilters"
headers {
contentType applicationJson()
accept applicationJson()
header"Authorization",execute('bearerOfAccessToken()')
}
body $(producer(execute('getRequestForFindTeamRolesByFilters()')),consumer("some value to be put on the consumer side"))
}
对于制作人
response {
status OK()
headers {
contentType applicationJson()
}
body $(producer(execute('getResponseForFindTeamRolesByFilters()')),consumer("something in the stub"))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。