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 |
для прогона только интеграционных тестов.
Похоже на опечатку (хотя откуда в помнике опечатка…)
org.apache.maven.plugin
plugins :)
http://maven.apache.org/surefire/maven-failsafe-plugin/usage.html ;)