Плагин Maven Failsafe и многомодульные проекты: как использовать другие модули из реактора?

76
11

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


Родитель:

-------- Module_A

-------- Module_B


Рассмотрим проходящий Test_B1_IT (в модуле B), который проверяет что-то в Class_A1 (в модуле A).


Теперь вы меняете Class_A1, и тест теперь терпит неудачу. Однако, если вы запустите цель


mvn failsafe:integration-test

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

Если вы запускаете интеграционный тест, он работает... но, похоже, он также запускает все модульные тесты (похоже, не существует способа пропустить модульные тесты и запустить тесты интеграции _IT).


Я также вижу, что он работает для теста интеграции цели или добавляет "компиляцию" перед отказоустойчивой целью. Первый вариант, однако, запускает все тесты (unit + integration)


Является ли это проблемой с отказоустойчивым плагином или просто тем, как maven обрабатывает зависимости в многомодульных проектах? Должен ли наилучший подход просто добавить параметр компиляции?

спросил(а) 2021-01-19T10:34:43+03:00 2 месяца, 3 недели назад
1
Решение
63

Первое, что вы можете пропустить модульные тесты, просто дать пропустить в командной строке, например:


mvn -Dmaven.test.skip=true lifecycle

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


Лучшим подходом является использование реактора Maven посредством вызова


mvn -D... -am -pl Module_A  lifecylcephase

Переключатель -am обязательно скомпилирует все зависимые модули.

Кроме того, я бы предложил поставить интеграционные тесты в отдельный модуль, что облегчит жизнь:


 +-- root 
+--- pom.xml
+--- mod1 (pom.xml)
+--- mod2 (pom.xml)
+--- mod-it (pom.xml)

Модем можно активировать с помощью профиля, например:


mvn -Prun-its ...

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


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

ответил(а) 2021-01-19T10:34:43+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема