Использование категорий JUnit с плагином Maven Failsafe
Я использую категории JUnit для разделения интеграционных тестов от модульных тестов. Конфигурация плагина Surefire работает - она пропускает тесты, аннотированные с помощью моего интерфейса Interface IntegrationTest.
Однако плагин Failsafe не выбирает тесты интеграции. Я даже пытался указать поставщика junit47, но тесты нуля выполняются на этапе интеграции.
Вот фрагмент pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
<configuration>
<groups>com.mycompany.test.IntegrationTest</groups>
<excludedGroups>com.mycompany.test.UnitTest</excludedGroups>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
</plugin>
Вот часть Failsafe журнала:
[INFO] --- maven-failsafe-plugin:2.12:integration-test (default) @ MyProject.war ---
[INFO] Failsafe report directory: /home/stoupa/MyProject/war/target/failsafe-reports
[INFO] Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Является ли провайдер org.apache.maven.surefire.junitcore.JUnitCoreProvider, который можно увидеть в выходном файле журнала справа?
Ответы
Ответ 1
По умолчанию защищенный плагин исключает различные файлы. Вы должны переопределить это. Измените раздел конфигурации следующим образом:
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<groups>com.mycompany.test.IntegrationTest</groups>
<excludedGroups>com.mycompany.test.UnitTest</excludedGroups>
</configuration>
Ответ 2
РЕШЕНИЕ
@Categories даст боль, поскольку вы должны отметить каждый из ваших тестов интеграции.
Попробуйте создать профиль inttests, как указано ниже, и пропустите его выполнение.
<profile>
<id>inttests</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<!-- skip the unit tests -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<includes>
<include>**/IT*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Префикс или суффикс тестов интеграции с некоторой строкой и укажите, что в include.
По умолчанию отказоустойчивые выбирают все тесты, предваряемые ИТ как интеграционные тесты.
Ref:
Отказоустойчивые включения и исключения
Запустите его, используя команду профиля maven
mvn verify -P inttests
Примечание.. В вышеприведенном подходе нам нужно запустить модульные тесты во время сборки, а затем выполнить inttests отдельно.
Обновления: в категориях JUnit4 с подключаемым модулем Failsafe
2.12 - Разветвленная виртуальная машина завершена, не говоря прощай. Сбой VM или System.exit?
https://issues.apache.org/jira/browse/SUREFIRE-827
2.12.1 - Невозможно найти верный драйвер в списке артефактов плагина
https://issues.apache.org/jira/browse/SUREFIRE-896
2.12.2 - есть ошибка, когда в модуле нет тестов, и он будет искать failafe-summary.xml и fail
https://issues.apache.org/jira/browse/SUREFIRE-901