Как проверить пакт с нулевыми данными

#pact #pact-jvm #pact-java

Вопрос:

Я знаю, что ПАКТ ожидает, что данные поставщика должны находиться под нашим контролем, но я сталкиваюсь со следующей ситуацией: У меня контракт пакта для нескольких потребителей, у всех есть какой-то обязательный атрибут, а некоторые являются необязательными атрибутами, но бизнес-логика подавляет все атрибуты, которые имеют нулевое значение, но в соответствии с контрактом мне все равно понадобится это значение как нулевое, что я должен для этого сделать? Правка 1: то есть, скажем, ниже мой контракт выглядит

 consumer sent request with below params:
 
 { "method": "GET", "path" : "/pathOfApi", "headers":{ "accept": "json" } }
 

Поставщик отвечает следующими данными:

 { "Status": 200,
"body" :[
{"country" : "string",
"countryId" :"string",
"postalcode": "string",
"addressLine1" :"string",
"addressLine2" : "string"
"customerName" : "string",
"customerId" : "string"
}
]
 

теперь не у всех клиентов есть адресная строка 2, теперь в производстве, если адресная строка 2 равна нулю, она не будет присутствовать в выводе api, но для нашего поля контракта должно присутствовать значение null

Ответ №1:

Если ваш поставщик не возвращает поле, но потребитель ожидает null , то либо потребителю необходимо изменить свои ожидания (поскольку они неверны), либо поставщик должен обновить свою реализацию, чтобы возвращать null значения.

Просто потому, что потребитель просит о чем-то, не означает, что вам нужно это делать!

Если в некоторых случаях поле присутствует, а в других его нет, вам нужно написать два теста для каждого случая. Я бы предложил охватить один случай всеми полями, а другой-минимальным набором полей (см. https://docs.pact.io/faq/#why-is-there-no-support-for-specifying-optional-attributes).

Комментарии:

1. извините, что не получаю you..in в моем случае потребитель предоставляет контракт из 15 полей, из которых когда-то все присутствуют, а когда-то not..so что делает поставщик, так это то, какие поля отсутствуют для этого идентификатора, он не предоставляет потребителю, но может предоставить для другого идентификатора

2. Извините, мне кажется, я не понимаю вашей ситуации. Возможно, вы не могли бы объяснить это примерами кода и полезной нагрузкой? Таким образом, мы сможем прояснить для вас некоторые вещи. Это немного похоже на необходимость тестирования различных состояний (данные присутствуют / отсутствуют), для которых вы обычно используете состояния поставщика.

3. обновлено,. не могли бы вы, пожалуйста, проверить это сейчас

4. Обновлено на основе ваших новых деталей вопросов

5. Пакт-это инструмент модульного тестирования, поэтому предполагается, что вы полностью контролируете свой код, как и в рамках модульного теста. Смотрите наш первый АМА, в котором рассказывалось об этом ( docs.pact.io/help/amas/#apac-1 ) но и наши документы.