Почему при использовании Spring Cloud Contracts производитель создает контракты?
Я играл с Spring Cloud Contracts. Вот мое понимание рабочего процесса до сих пор.
На стороне сервера
- Написать договор (в заводной или ямл)
- Автоматически генерировать тесты (используя плагин Gradle)
- Настройте BaseClass, который делает соответствующие настройки для контроллера
- Запустите автоматически сгенерированные тесты
- Опубликовать файл-заглушку, созданный в каком-либо локальном репозитории (который содержит встроенный сервер Wiremock, с запросом / ответом)
На стороне клиента
- Скачать файл заглушки
- Напишите тесты против этой заглушки. Используйте stubrunner для проверки ответов
Чего я не понимаю, так это как движется этот потребитель? Контракты, похоже, исходят от производителя, потребитель, похоже, пассивно проверяет то, что опубликовал производитель (используя файл заглушек). Производитель может случайно не обновлять контракты, но вносить критические изменения. Это может привести к прохождению тестов на клиенте, даже если он не прошел. Это правда или я неправильно понял шаг, когда контракты создаются со стороны потребителя
Мысли?
1 ответ
Разработка на основе потребительских контрактов (CDC) - это в основном разработка на основе тестов (TDD), распространяемая на приложения "производитель-потребитель". Так как это TDD - сначала должны быть тесты, а затем реализация. И так как это управляемый потребителем - потребитель создает тесты для производителя.
Итак, давайте предположим, что у нас есть производитель и потребитель, а некоторые новые feature
это должно быть реализовано. В CDC рабочий процесс будет выглядеть следующим образом (вы можете найти больше информации в официальной документации).
На потребительской стороне:
- Напишите недостающую реализацию для функции
- Хранилище Clone Producer локально
- Определите контракт локально в репозитории Producer (и автоматически сгенерируйте для него юнит-тесты)
- Запустите интеграционные тесты (на стороне клиента)
- Подать запрос на получение
На стороне производителя:
- Возьмите запрос на удаление (тесты уже сгенерированы здесь клиентом)
- Напишите отсутствующую реализацию (в стиле TDD)
- Разверните свое приложение
- Работа онлайн
Теперь все это имеет смысл, поскольку потребитель пишет контракты на новую функцию (но в репозитории производителя) - у нас есть подход, ориентированный на потребителя.