PACT - обработка состояния сервиса провайдера и запуск фактического провайдера с имитацией или реальной базой данных.

Я новичок в PACT и пытаюсь использовать pact-net для тестирования контрактов для микросервиса .net. Я понимаю концепцию потребительского теста, который генерирует файл pact. Существует концепция промежуточного программного обеспечения состояния поставщика, которое отвечает за обеспечение соответствия состояния поставщика условию Given() в сгенерированном пакте. Я немного смущен следующим или как этого добиться:

Тесты провайдера запускаются на фактическом сервисе. Итак, мы запускаем сервис провайдера до запуска тестов. Служба моего провайдера взаимодействует с базой данных для хранения и извлечения записей. PACT также упоминает, что все зависимости службы должны быть заглушены.

  1. Итак, мы запускаем фактический api провайдера, который работает с фактическим db?
  2. Если мы запускаем api для реальной базы данных, как мы можем ввести данные в базу данных? Должны ли мы использовать собственные конечные точки api провайдера для добавления данных Given()?
  3. Если вышеперечисленное не является правильным подходом, тогда что?

Все основные статьи в блогах, с которыми я столкнулся, не объясняют этого и обычно содержат примеры без состояний поставщика или состояний, которые представляют собой просто некоторые текстовые файлы в файловой системе.

Помощь приветствуется.

2 ответа

Я собираюсь добавить к комментарию Мэтта, у вас есть три варианта:

  1. Проведите тест вашего провайдера с подключенной средой, но после этого вам придется выполнить некоторую очистку вручную и убедиться, что ваши данные всегда доступны в вашей базе данных или / и внешние API всегда работают. Просто написать, но может быть очень сложно поддерживать.

  2. Вы имитируете свои вызовы API, но вызываете настоящую базу данных.

  3. Вы имитируете все свои внешние зависимости: API и вызовы БД.

Для 2) или 3) вам нужно будет иметь тестовые маршруты и внедрить промежуточное ПО состояния провайдера в тестовое приспособление вашего провайдера. Затем вы можете настроить состояния поставщика, которые будут вызываться для генерации данных в памяти, если решение 3), или добавить некоторые данные-init, если вы находитесь в решении 2)

Вы можете найти пример здесь: https://github.com/pact-foundation/pact-net/tree/master/Samples/EventApi/Provider.Api.Web.Tests

Тесты провайдера запускаются на фактическом сервисе.

Вы имеете в виду живую среду или фактическую службу, работающую локально в модульном тесте (первое не рекомендуется из-за (2) выше).

  1. Это одно из исключений из этого правила. Вы можете использовать реальную БД или базу данных в памяти - как вам удобнее. Обычно для тестирования используются докеры и подобные инструменты.

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

Другие вопросы по тегам