Вопрос по maven, unit-testing, java, junit, maven-failsafe-plugin – Использование категорий JUnit с плагином Maven Failsafe

11

Я использую 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, который можно увидеть в выходных данных журнала, правильным?

Почему вы не используете соглашения об именах для интеграционных тестов maven-failsafe-plugin? Может быть проще. khmarbaise
Я испытываю то же самое здесь. при замене failsafe на surefire все работает нормально ... Boaz

Ваш Ответ

2   ответа
13

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

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

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

Этот ответ на самом деле не отвечает на вопрос, это обходной путь. У меня та же проблема. Это ошибка?
@hithwen Я упоминал о боли в решении проблем, с которыми мы сталкиваемся из-за аннотации категорий с отказоустойчивостью. Я только что отредактировал это как обходной путь, и именно так я пытался его решить.
Вам не нужно отмечать каждый тест, достаточно создать аннотированный суперкласс и унаследовать его. Во всяком случае, я не вижу, как аннотирование каждого класса является более болезненным, чем его именование IT *
Та же проблема здесь ... кто-нибудь знает решение? & Lt; excludeGroups & GT; работает однако!

Похожие вопросы