Многомодульные тесты, которые зависят друг от друга

Сейчас я пишу интеграционные тесты между двумя модулями:

  • Модуль A - содержит сервис REST, который можно докеризовать через плагин maven
  • Модуль B - содержит интеграционные тесты, которые зависят от того, работает ли докер модуля A

Поэтому я использовал отказоустойчивый плагин, который содержит этапы до-интеграционных тестов и пост-интеграционные тесты.

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

В плагине Docker, который я использую (fabric8), есть также 2 фазы, которые я использую на вышеуказанных этапах: область docker:start и docker:stop

Проблема возникает, когда я запускаю весь проект, докеры убиваются в модуле A до запуска тестов модуля B, поэтому я подумал, что если бы я мог сказать родительскому модулю, который содержит их, что-то вроде:

  • Старт модуля B: панель запуска
  • Запустите интеграционные тесты всего проекта
  • Запустить модуль B: остановить плагин

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

2 ответа

Насколько мне известно, Maven не может приостановить сборку модуля, пока не будет выполнено условие в другом модуле; Maven полностью выполняет сборку подмодуля перед тем, как приступить к сборке другого подмодуля.

Вы можете, однако, сделать Module B зависит от Module A (даже зависит от набора тестовых классов от него), и, таким образом, вы можете запустить службу REST в рамках сборки Module B, как часть ваших интеграционных тестов.

Насколько я понимаю ваши настройки, сборка Module A не имеет никакого отношения к запуску / остановке контейнеров; Таким образом, Module A не должен этого делать.

Вместо этого контейнер должен быть запущен и остановлен в Module B"s pre-integration-test а также post-integration-test фазы соответственно. В конце концов, Module B"s integration-test фазе нужен работающий контейнер, а не Module A,

Если вы не привыкли к маневренному (самоуверенному) способу действий, это может показаться излишне ограничительным, но Maven просто заставляет вас поступать правильно. Подумайте об этом так: если в будущем Module C также нужен работающий докер-контейнер, например, для запуска некоторых других тестов вы не захотите утилизировать один докер-контейнер (запущенный Module A). Как это рискует Module B а также Module C взаимодействуя забавными способами, каждый модуль должен получить свой собственный докер-контейнер для работы.

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