Пакт — контрактное тестирование — проверка потребителя и производителя на соответствие контракту

#testing #verify #pact #contract

#тестирование #проверка #соглашение #контракт

Вопрос:

Я создал демонстрационное приложение для тестирования по пакту-контракту. Ниже приведена ссылка, на которую я ссылался. Я изменил несколько вещей из этого, таких как patternmatcher и bodytype. https://www.javacodegeeks.com/2017/03/consumer-driven-testing-pact-spring-boot.html

Я могу опубликовать пакт от потребителя и проверить его со стороны поставщика.

Меня попросили также проверить пакт со стороны потребителя. Например. потребитель отправляет следующий json поставщику для создания нового пользователя.

   {
  "address": {
    "city": "string",
    "houseNumber": 0,
    "postalCode": "string",
    "street": "string"
  },
  "name": "string",
  "registrationId": 0,
  "surname": "string"
}
  

Но теперь потребитель изменяет классы модели. (поскольку это также поставщик для какой-либо другой услуги. возможно, удастся получить запрос на изменение контракта (change contract). Ниже приведен новый запрос json, который будет сгенерирован.

 {
  "address": {
    "city": "string",
    "houseNumber": 0,
    "postalCode": "string",
    "street": "string"
  },
  "firstname": "string",
  "registrationId": 0,
  "surname": "string"
}
  

При изменении объекта запроса. Если я проверю потребителя на соответствие пакту. Это должно завершиться неудачей.

Проблема: Когда я запускаю mvn: verify от потребителя, это всегда нормально. Я хочу, чтобы это завершилось неудачей.

PS Дайте мне знать, если это неправильный способ сделать это.

Ответ №1:

Потребительский тест аналогичен модульному тестированию. Это всегда пройдет, если ваш код выполняет то, что вы ожидаете от него в тесте. Это не зависит от предыдущего состояния (такого как предыдущий сгенерированный контракт).

Часть процесса, в которой вы должны проверять наличие критических изменений, выполняется в CI с помощью инструмента can I deploy (https://docs.pact.io/pact_broker/can_i_deploy ).

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

1. Нет ли какой-либо возможности сделать это с помощью maven? Я хочу разорвать его только во время разработки.

2. Я не знаю, существует ли задача can-i-deploy (я не помню, чтобы слышал о ней, поэтому я бы сказал, что, вероятно, это не так), но вы должны быть в состоянии создать свою собственную задачу maven для ее выполнения, если этого не происходит. Или не используйте Maven для этого, а просто используйте инструменты CLI Pact hub.docker.com/r/pactfoundation/pact-cli