У меня есть образец тела, как показано ниже;
[
"01/01/2019",
"01/02/2019",
"01/03/2019"
]
Я хотел бы проверить следующее:
1. Ответом должен быть массив с как минимум 1 элементом
2. Каждый элемент должен быть:
2.1. строка
2.2. Должен быть в этом формате "ДД / ММ / ГГГГ"
Отлично работает со «старым» стилем:
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) , он не генерирует одинаковые правила сопоставления; следовательно, не работает так же, и мой тест провайдера всегда завершается неудачей с сообщением об ошибке ниже
$ -> Ожидается список с 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)
в разных местах, но ни одно из них не работает. Можно ли как-нибудь создать такие же правила сопоставления, используя лямбда-Dsl для Pact?