Использование категорий 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