问题描述
我正在使用 MockServer body matchers 来验证端点请求的正文参数。某些属性可以匹配 exactly,但其他属性可能需要单独的 subString 或 regex 匹配器,因为该属性的一部分是未知的。例如,日期时间字符串可能具有已知日期,但未知时间。
但是,对于多个 withBody()
调用,如果一个或多个匹配器通过,则 verify
方法通过。如何实现逻辑 AND 而不是 OR?
mockServer.verify(
request()
.withPath(url)
.withMethod("POST")
.withBody(
json(
"{\"firstName\": \"foo\",\"lastName\": \"bar\"}",MatchType.ONLY_MATCHING_FIELDS))
.withBody(
// Need subString because we don't kNow the time and only want to validate the date
subString("\"order_date_time\": \"2021-04-15")));
解决方法
要对多个正文匹配器条件执行逻辑与运算,您需要多次调用 verify()
方法:
private void verifyOrderPlaced() {
verifyName();
verifyOrderDate();
}
private void verifyName() {
mockServer.verify(
request()
.withPath(url)
.withMethod("POST")
.withBody(
json(
"{\"firstName\": \"foo\",\"lastName\": \"bar\"}",MatchType.ONLY_MATCHING_FIELDS)));
}
private void verifyOrderDate() {
mockServer.verify(
request()
.withPath(url)
.withMethod("POST")
.withBody(
subString("\"order_date_time\": \"2021-04-15")));
}