Запуск Maven Integration тестов в многомодульном проекте
Быстрый ответ
Для выполнения интеграционных тестов в Maven используйте maven-failsafe-plugin
. Дополните файл pom.xml
следующей конфигурацией:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.2</version> <!-- Используйте самую свежую версию -->
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Для начала тестирования выполните команду mvn verify
. Обратите внимание, что названия файлов интеграционных тестов должны соответствовать шаблону **/*IT.java
, чтобы плагин смог их корректно обработать.
Неизменная конвенция наименования для интеграционных тестов
Maven Failsafe Plugin автоматически определяет тесты, соответствующие следующим шаблонам названий:
**/IT*.java
**/*IT.java
**/*ITCase.java
Эти правила имениования обеспечивают быстрое обнаружение файлов, например, CustomerServiceIT.java
или OrderManagementITCase.java
.
Когда начать магию – выполнение интеграционных тестов
Интеграционные тесты должны запускаться на более поздних этапах жизненного цикла Maven:
mvn verify
: Запускает юнит- и интеграционные тесты.mvn install
: Включает фазуverify
, выполняющую интеграционные тесты.mvn deploy
: Идентичноinstall
.
Разграничение юнит и интеграционных тестов
Для отделения интеграционных тестов от юнит-тестов, используйте Maven Surefire Plugin, исключающий интеграционные тесты на этапе test
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IT.java</exclude>
<exclude>**/*ITCase.java</exclude>
</excludes>
</configuration>
</plugin>
Для выбора определенных тестов выполните:
mvn test -Dtest=MyUnitTest
mvn failsafe:integration-test -Dit.test=MyIntegrationTest
Создание пользовательских фаз тестирования
Вы можете создать специализированные запуски Surefire Plugin для конкретных сценариев тестирования:
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
<phase>integration-test</phase>
</execution>
Интегрирование категорий JUnit
Применение аннотации @Category
в JUnit позволяет категоризировать тесты. Настройте Maven Surefire на исключение и Maven Failsafe на включение категоризированных тестов:
<!-- Конфигурация Surefire -->
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
<!-- Конфигурация Failsafe -->
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
Специализированные плагины для точного тестирования
- Surefire Plugin используется для юнит-тестов. Запустите команду
mvn clean test
. - Failsafe Plugin предназначен для интеграционных тестов. Запустите команду
mvn clean verify
.
Пропуск тестов
- Для пропуска юнит-тестов добавьте
mvn install -DskipUnitTests
- Для исключения интеграционных тестов
mvn install -DskipIntegrationTests
.
Визуализация
Визуализируйте процесс интеграционного тестирования в Maven в виде захватывающего цифрового путешествия:
- X = Ваши интеграционные тесты
- 🗺️ = Конфигурация Maven
- 🔍 = Surefire Plugin (юнит-тесты)
- 🧭 = Failsafe Plugin (интеграционные тесты)
- Планирование путешествия:
Отметьте маршрут в файле
pom.xml
🧭 (Failsafe Plugin) для X. - Исследование маршрута:
Запустите путешествие командами
mvn verify
илиmvn failsafe:integration-test
. - Обнаружение секретов:
X проявляются на этапах
integration-test
иverify
.
Устранение статичных тестов
Если ваши интеграционные тесты не запускаются, проверьте следующее:
Нечеткость в названиях
Следуйте стандартам Failsafe или настройте их в pom.xml
.
Непреднамеренное пропускание тестов
Убедитесь, что не используются свойства для непреднамеренного пропуска тестов (-Dmaven.test.skip=true
).
Неправильно настроенный плагин
Тщательно проверьте корректность конфигурации плагинов в pom.xml
.
Зависимости тестов затмевают область видимости
Убедитесь, что тестовые зависимости не мешают выполнению интеграционных тестов.
Столкновение с уникальными случаями в непрерывной интеграции
Учтите редкие, но важные моменты интеграционного тестирования:
Тестирование в профиле
Применение профилей Maven позволяет настраивать сборку под конкретное окружение:
<profiles>
<profile>
<id>ci-server</id>
<build>
<plugins>
...
</plugins>
</build>
</profile>
</profiles>
Параллельное выполнение тестов
Параллельный запуск поможет ускорить процесс тестирования:
<configuration>
<parallel>classes</parallel>
<threadCount>4</threadCount>
</configuration>
Особенности работы с ненадежными тестами
Подумайте о возможности повторного запуска и демонстрации ненадежных тестов как необязательных.
Полезные материалы
- Maven – Maven в течение 5 минут — вступительное руководство по Maven.
- Maven Surefire Plugin – Включения и исключения тестов — руководство по управлению тестами с помощью Surefire.
- Maven Failsafe Plugin – Введение — всеобъемлющее руководство по интеграционному тестированию.
- Maven – Введение в жизненный цикл сборки — описание фаз жизненного цикла Maven.
- Пользовательское руководство JUnit 5 — документация по настройке и использованию JUnit 5.
- Приступая к работе · Руководства Arquillian — руководство по интеграционному тестированию с Arquillian.