Запретить модульные тесты, но разрешить интеграционные тесты в Maven


у меня есть сборка Maven, в которой я использую плагин SureFire для запуска некоторых модульных тестов и отказоустойчивый плагин для запуска некоторых интеграционных тестов. Я хотел бы способ запустить только тесты отказоустойчивого плагина.

это не хорошее решение для меня, чтобы добавить различные профили или что-нибудь в pom, потому что это многомодульная сборка, и я не хочу, чтобы редактировать pom каждого модуля.

здесь skip.tests и maven.test.skip и skipTests остановка все тесты, и skipITs, который останавливает только отказоустойчивый плагин.

Итак, есть ли флаг командной строки для Maven как skipITs, но вместо этого с функциональностью "onlyITs"?

6 109

6 ответов:

я нашел самый простой способ пропустить только тесты surefire-настроить surefire (но не безотказный) следующим образом:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14</version>
    <configuration>
        <!-- skips surefire tests without skipping failsafe tests.
                 Property value seems to magically default to false -->
        <skipTests>${skip.surefire.tests}</skipTests>
    </configuration>
</plugin>

это позволяет запускать mvn verify -Dskip.surefire.tests и только верный, не безотказный, тесты будут пропущены, а также выполнить все другие необходимые этапы, включая пре-и пост интеграции-интеграции, а также будет работать verify цель, которая требуется на самом деле сбой сборки maven если ваши интеграционные тесты неудача.

обратите внимание, что это переопределяет свойство, используемое для указания того, что тесты должны быть пропущены, поэтому если вы предоставляете каноническое -DskipTests=true, surefire будет игнорировать его, но failsafe будет уважать его, что может быть неожиданным, особенно если у вас уже есть существующие сборки/пользователи, указывающие этот флаг. Простой обходной путь, кажется, по умолчанию skip.surefire.tests стоимостью skipTests в своем ПМ:

<properties>
    <skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>

Если вам нужно, то вы смогли обеспечить analagous параметр называется skip.failsafe.tests для отказоустойчивости, однако я не нашел это необходимым - потому что модульные тесты обычно выполняются на более ранней стадии, и если я хочу запустить модульные тесты, но не интеграционные тесты, я бы запустил test фаза вместо

обходным путем было бы позвонить:

mvn clean test-compile failsafe:integration-test

конечно, это некрасиво, но это может решить вашу проблему.


или (еще один хак):

mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false

ссылки:

я использую код Блог Антонио Гонсалвеса , который работает идеально.

вы можете использовать следующие свойства:

-DskipUTs=true для пропуска тестов surefire.

-DskipITs=true для пропуска отказоустойчивых тестов.

-DskipTests=true для пропуска всех тестов.

The pom.xml следующим образом:

<properties>
    <skipTests>false</skipTests>
    <skipITs>${skipTests}</skipITs>
    <skipUTs>${skipTests}</skipUTs>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skipTests>${skipUTs}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <executions>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
            </configuration>
        </plugin>
    </plugins>
</build>

надеюсь, что это помогает!

попробуйте запустить тест только с FailSafe (плагин для integration-test-он позволит вам запускать только интеграционные тесты с таким именем по умолчанию: * / IT.java,**/его.java,* / * ITCase.java;, но вы можете легко изменить это из файла pom)

mvn failsafe:integration-test

и когда вы хотите использовать только SureFire (плагин для модульного тестирования)

mvn surefire:test

или один тест одновременно с:

mvn -Dtest=MyUnitlTest

мне это нравится, поэтому все фазы обычно выполняются:

 mvn -Dtest=foo -DfailIfNoTests=false verify

попробуйте запустить интеграционные или модульные тесты в отдельном профиле. Затем вы можете просто включить/отключить профиль.