Запуск 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.
 


