Maven surefire и failsafe плагины. Используем вместе и по отдельности

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <skipITs>true</skipITs>
    </properties>
    [...]
    <build>
        <plugins>
            <!-- UT plugin -->
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <includes>
                        <include>ut/**</include>
                    </includes>
                    <excludes>
                        <exclude>it/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- IT plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.19.1</version>
                <executions>
                    <execution>
                        <id>failsafe-integration-tests</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <skipITs>false</skipITs>
                    <skipTests>true</skipTests>
                    <includes>
                        <include>it/**</include>
                    </includes>
                    <excludes>
                        <exclude>ut/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    [...]

Объяснения. Для начала в свойства по умолчанию добавляем отлючение интеграционных тестов. Потому что интеграционные тесты могут занимать достаточно больше количество времени и нам не всегда нужно их гонять. Это мы делаем тэгом <skipITs>.

После этого добавляем два плагина в нашу сборку.

За запуск юнит тестов отвечает maven-surefire-plugin. Он по умолчанию стартует только тесты, которые отвеачют следующему соглашению имён:

  • Test*.java
  • *Test.java
  • *TestCase.java

Но в моём проекте, для которого я это делал требование (которое придумал Atlassian), что все юнит тесты лежат в пакетах, начинющихся на ut, а интеграционные на it. Поэтому у меня в настройку плагина включаются и исключаются определённые пакеты. По идее, если вы будете следовать соглашению имён в плагинах — у вас тоже будет всё работать.

За запуск интеграционных тестов отвечает maven-failsafe-plugin. Его тоже нужно настроить. Для этого нужно как минимум указать ему, что интеграционные тесты нужно снова гонять, а юнит тесты нас не интересуют:

<skipITs>false</skipITs>
<skipTests>true</skipTests>

и точно так же задать исключения и включения опредёлнных пакетов. Конечно, у этого плагина тоже есть соглашение по именованию файлов и выглядит оно вот так:

  • IT*.java
  • *IT.java
  • *ITCase.java

Но, как я говорил, есть некоторые проектные требования :)

Запускать соответственно:

mvn любая_цель_не_ИТ

Для прогона с юнит тестами и

mvn integration-test

для прогона только интеграционных тестов.

Читайте также:

комментария 2

  1. Maria:

    Похоже на опечатку (хотя откуда в помнике опечатка…)

    org.apache.maven.plugin

    plugins :)

Добавить комментарий для Maria Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *