Запуск Maven Integration тестов в многомодульном проекте

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для выполнения интеграционных тестов в Maven используйте maven-failsafe-plugin. Дополните файл pom.xml следующей конфигурацией:

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, чтобы плагин смог их корректно обработать.

Кинга Идем в IT: пошаговый план для смены профессии

Неизменная конвенция наименования для интеграционных тестов

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:

xml
Скопировать код
<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>

Для выбора определенных тестов выполните:

shell
Скопировать код
mvn test -Dtest=MyUnitTest
mvn failsafe:integration-test -Dit.test=MyIntegrationTest

Создание пользовательских фаз тестирования

Вы можете создать специализированные запуски Surefire Plugin для конкретных сценариев тестирования:

xml
Скопировать код
<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 на включение категоризированных тестов:

xml
Скопировать код
<!-- Конфигурация 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 (интеграционные тесты)
  1. Планирование путешествия: Отметьте маршрут в файле pom.xml 🧭 (Failsafe Plugin) для X.
  2. Исследование маршрута: Запустите путешествие командами mvn verify или mvn failsafe:integration-test.
  3. Обнаружение секретов: X проявляются на этапах integration-test и verify.

Устранение статичных тестов

Если ваши интеграционные тесты не запускаются, проверьте следующее:

Нечеткость в названиях

Следуйте стандартам Failsafe или настройте их в pom.xml.

Непреднамеренное пропускание тестов

Убедитесь, что не используются свойства для непреднамеренного пропуска тестов (-Dmaven.test.skip=true).

Неправильно настроенный плагин

Тщательно проверьте корректность конфигурации плагинов в pom.xml.

Зависимости тестов затмевают область видимости

Убедитесь, что тестовые зависимости не мешают выполнению интеграционных тестов.

Столкновение с уникальными случаями в непрерывной интеграции

Учтите редкие, но важные моменты интеграционного тестирования:

Тестирование в профиле

Применение профилей Maven позволяет настраивать сборку под конкретное окружение:

xml
Скопировать код
<profiles>
    <profile>
        <id>ci-server</id>
        <build>
            <plugins>
                ...
            </plugins>
        </build>
    </profile>
</profiles>

Параллельное выполнение тестов

Параллельный запуск поможет ускорить процесс тестирования:

xml
Скопировать код
<configuration>
    <parallel>classes</parallel>
    <threadCount>4</threadCount>
</configuration>

Особенности работы с ненадежными тестами

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

Полезные материалы

  1. Maven – Maven в течение 5 минут — вступительное руководство по Maven.
  2. Maven Surefire Plugin – Включения и исключения тестов — руководство по управлению тестами с помощью Surefire.
  3. Maven Failsafe Plugin – Введение — всеобъемлющее руководство по интеграционному тестированию.
  4. Maven – Введение в жизненный цикл сборки — описание фаз жизненного цикла Maven.
  5. Пользовательское руководство JUnit 5 — документация по настройке и использованию JUnit 5.
  6. Приступая к работе · Руководства Arquillian — руководство по интеграционному тестированию с Arquillian.