我的身体如下:
[
"01/01/2019",
"01/02/2019",
"01/03/2019"
]
我想验证以下内容: 1.响应应为包含至少1个元素的数组 2.每个要素应为: 2.1。串 2.2。格式应为“ DD / MM / YYYY”
它与“旧”样式完全兼容:
DslPart body = PactDslJsonArray.arrayMinLike(1, 2, PactDslJsonRootValue.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019"));
这将生成具有以下匹配规则的协定文件。请注意$
和$[*]
...
"matchingRules": {
"body": {
"$": {
"matchers": [
{
"match": "type",
"min": 1
}
],
"combine": "AND"
},
"$[*]": {
"matchers": [
{
"match": "regex",
"regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
}
],
"combine": "AND"
}
}
}
但是,当我尝试使用“新”样式,即 Pact(Java8)的lambda Dsl 时,它不会生成相同的匹配规则;因此无法以相同的方式工作,并且我的提供者测试始终失败,并显示以下错误消息
$->期望包含1个元素的列表,但收到3个元素
下面是代码和我的代码生成的匹配规则。请注意$[0]
和$[1]
:
匹配规则
...
"matchingRules": {
"body": {
"$[0]": {
"matchers": [
{
"match": "regex",
"regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
}
],
"combine": "AND"
},
"$[1]": {
"matchers": [
{
"match": "type",
"min": 1
}
],
"combine": "AND"
}
}
}
和代码
DslPart body = newJsonArray((array) -> {
array
.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019");
}).minArrayLike(1).build();
尝试了另一种方式
DslPart body = newJsonArray((array) -> {
array
.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019")
.minArrayLike(1);
}).build();
我一直试图将.minArrayLike(1)
放置在不同的位置,但是它们都不起作用。反正有使用Lambda Dsl for Pact产生相同的匹配规则吗?
答案 0 :(得分:0)
我遇到了同样的问题。请查看问题和解决方法here
例如:-
final DslPart actualPactDsl = LambdaDsl.newJsonBody((bodyDsl) -> {
bodyDsl
.stringType("id", "1")
.stringType("name","Dep 1")
.minArrayLike("students",1,(stud) ->{
stud
.stringType("id","1")
.stringType("firstName","John")
.stringType("lastName","Smith")
.numberType("age",21);
});
}).build();