Первый maven-fail-плагин запускается по умолчанию в другой фазе жизненного цикла (интеграционный тест), как это делает maven-surefire-plugin (test). Кроме того, вы можете настроить maven-отказоустойчивый плагин для запуска цели verify
на этапе тестирования post-integration-test
, если вы хотите проверить, не прошли ли тесты интеграции. Это можно свободно настроить.
В мой разум входит один вопрос. У вас есть 10 модулей, и теперь вы хотите провести интеграционные тесты? К какому модулю они принадлежат? Лучше всего иметь отдельный модуль, потому что они не принадлежат ни одному из 10 модулей.
Кроме того, плагин maven-surefire уже настроен в жизненном цикле по умолчанию. Да, дополнительная цель была бы идеей, но это путало бы пользователя использовать одни и те же плагины в разных отношениях. Поэтому разделение проблем важно здесь. Помимо всех конфигураций по умолчанию ... Эти плагины имеют общую базу кода, но есть различия ...
Также, что уже упоминалось Tunaki, это pre-integration-test
, для настройки таких вещей, как серверы и т. Д. integration-test
и такие вещи, как shutting вниз служб/серверов в post-integration-test
фазы. Это никогда не произойдет в модульных тестах.
Использование отдельного модуля упрощает настройку ИТ, что означает наличие разных зависимостей (classpath), чем для модульных тестов. Например, такие вещи, как Arquillian.org, которые никогда не используются в модульных тестах. Это не может быть обработано в одном модуле ... также хорошие вещи - это разделение проблем здесь.
Кроме того, интеграционные тесты не могли быть перегруппированы по умолчанию, тогда как модульные тесты могут быть по определению, иначе они не будут выполнять модульные тесты.
А как насчет расположения папок? В тестовом модуле интеграции вы можете просто использовать папку src/test/java
, что означает, что вам не нужна дополнительная конфигурация и т. Д. (Например, через build-helper-maven-plugin и т. Д.), Что упрощает ее и следует более условно над парадигмой конфигурации.
И не забывайте, что вы можете лучше контролировать то, что работает в вашей сборке (CI) ..
И еще один важный намек. Обычно интеграционные тесты часто связаны с инфраструктурой, поэтому иногда полезно игнорировать сбои там, которые могут просто обрабатываться с помощью check
цели maven-отказоустойчивого-плагина ....
Пример для ИТ-модуля можно найти here.
То, о чем вы упомянули, не является чистым, это правильно, потому что те ИТ-классы получают путь к классу как ваш юнит-тест, который может не понравиться. Лучше всего иметь полный отдельный модуль, который содержит ИТ. Найдите их в использовании 'src/test/java' и следуйте правилам именования для ИТ, как вы уже упоминали. – khmarbaise
@khmarbaise: Спасибо за объяснение, я ценю, что он идет прямо от одного из участников проекта Apache Maven! Я понимаю, о чем вы говорите, хотя я не совсем согласен с тем, что если бы вы использовали его в другом каталоге, ваши зависимости ' test ' будут разными. Их не будет. То, что я также не понимаю, (несмотря на то, что прочитал немного по этому вопросу), - это то, что в этом случае для этого должен быть отдельный плагин? Может быть, была бы еще одна цель для 'maven-surefire-plugin', который будет вызван во время фазы тестирования интеграции? –
carlspring