Использование категорий JUnit с плагином Maven Failsafe

Я использую JUnit Categories, чтобы отделить интеграционные тесты от юнит-тестов. Конфигурация плагина Surefire работает - он пропускает тесты, помеченные моим маркером интерфейса 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, который можно увидеть в выходных данных журнала, правильным?

 khmarbaise18 июл. 2012 г., 15:44
Почему вы не используете соглашения об именах для интеграционных тестов maven-failsafe-plugin? Может быть проще.
 Boaz25 окт. 2012 г., 17:01
Я испытываю то же самое здесь. при замене failsafe на surefire все работает нормально ...

Ответы на вопрос(2)

Решение Вопроса

жны переопределить это. Поэтому измените раздел конфигурации на следующий:

<configuration>
    <includes>
        <include>**/*.java</include>
    </includes>
    <groups>com.mycompany.test.IntegrationTest</groups>
    <excludedGroups>com.mycompany.test.UnitTest</excludedGroups>
</configuration>
 17 февр. 2017 г., 15:40
Да, по умолчанию он включает только файлы Java, соответствующие определенным шаблонам, используемым для интеграционных тестов (например, "* IT.java"). Если вы используете категории вместо соответствия имени файла, вам нужно удалить критерии соответствия имени файла.

WORKAROUND

@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>

Префикс или суффикс Интеграционных тестов с некоторой строкой и укажите это во включениях. По умолчанию отказоустойчивый выбирает все тесты с префиксом ИТ в качестве интеграционных тестов. Ref: Отказоустойчивые включения и усиление Исключения

Запустите его, используя команду профиля maven

mvn verify -P inttests

Note: В вышеупомянутом подходе нам нужно запустить модульные тесты во время сборки, а затем отдельно протестировать.

Updates: On JUnit4 Categories With Failsafe Plugin

2.12 - The forked VM terminated without saying properly goodbye. VM crash or System.exit called ? https://issues.apache.org/jira/browse/SUREFIRE-827

2.12.1 - Unable to locate surefire-booter in the list of plugin artifacts https://issues.apache.org/jira/browse/SUREFIRE-896

2.12.2 - has a bug when no tests are there in a module it will look for failsafe-summary.xml and fail https://issues.apache.org/jira/browse/SUREFIRE-901

 12 февр. 2013 г., 12:16
Вам не нужно отмечать каждый тест, достаточно создать аннотированный суперкласс и унаследовать его. Во всяком случае, я не вижу, как аннотирование каждого класса является более болезненным, чем его именование IT *
 07 июн. 2013 г., 13:54
Та же проблема здесь ... кто-нибудь знает решение? & Lt; excludeGroups & GT; работает однако!
 28 мая 2013 г., 08:27
Этот ответ на самом деле не отвечает на вопрос, это обходной путь. У меня та же проблема. Это ошибка?
 31 янв. 2014 г., 01:38
@hithwen Я упоминал о боли в решении проблем, с которыми мы сталкиваемся из-за аннотации категорий с отказоустойчивостью. Я только что отредактировал это как обходной путь, и именно так я пытался его решить.

Ваш ответ на вопрос