Запретить юнит-тесты, но разрешить интеграционные тесты в Maven

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

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

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

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

119 голосов | спросил Matthew Gilliard 7 J000000Thursday11 2011, 18:36:12

6 ответов


0

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

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

ответил bacar 29 J000000Monday13 2013, 23:41:14
0

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

mvn clean test-compile failsafe:integration-test

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


Или (еще один взлом):

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

Справка:

ответил Sean Patrick Floyd 7 J000000Thursday11 2011, 18:47:34
0

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

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

-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>
ответил Martijn Burger 17 J0000006Europe/Moscow 2016, 14:25:27
0

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

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

mvn failsafe:integration-test

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

mvn surefire:test

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

mvn -Dtest=MyUnitlTest
ответил Kati Holasz 1 SunEurope/Moscow2013-12-01T19:32:16+04:00Europe/Moscow12bEurope/MoscowSun, 01 Dec 2013 19:32:16 +0400 2013, 19:32:16
0

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

 mvn -Dtest=foo -DfailIfNoTests=false verify
ответил Jérôme Herry 28 FebruaryEurope/MoscowbFri, 28 Feb 2014 15:19:07 +0400000000pmFri, 28 Feb 2014 15:19:07 +040014 2014, 15:19:07
0

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

ответил Steven 8 J000000Friday11 2011, 04:00:11

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132