Запретить юнит-тесты, но разрешить интеграционные тесты в Maven - PullRequest
129 голосов
/ 07 июля 2011

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

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

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

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

Ответы [ 6 ]

144 голосов
/ 29 июля 2013

Я нашел самый простой способ пропустить только верные тесты, это настроить верный (, но не безотказный ) следующим образом:

<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, верный метод игнорирует его, но отказоустойчивый будет уважать его, что может быть неожиданным, особенно если у вас есть существующие сборки /пользователи, указывающие этот флаг уже.Простой обходной путь, кажется, по умолчанию skip.surefire.tests к значению skipTests в вашей секции <properties> pom:

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

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

Эти skip.(surefire|failsafe).tests свойства, вероятно, должны быть интегрированы в сам верный / отказоустойчивый код, но я не уверен, насколько сильно он нарушит «они точно такой же плагин за исключением 1крошечная разница "этос.

108 голосов
/ 07 июля 2011

В качестве обходного пути можно было бы позвонить:

mvn clean test-compile failsafe:integration-test

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

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

Ссылка:

54 голосов
/ 17 июня 2016

Я использую код из Antonio Goncalves Blog , который отлично работает.

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

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

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

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

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>
18 голосов
/ 01 декабря 2013

Надеюсь, это поможет!

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

mvn failsafe:integration-test

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

mvn surefire:test

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

mvn -Dtest=MyUnitlTest
7 голосов
/ 28 февраля 2014

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

 mvn -Dtest=foo -DfailIfNoTests=false verify
0 голосов
/ 08 июля 2011

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

...