Запретить модульные тесты, но разрешить интеграционные тесты в Maven
у меня есть сборка Maven, в которой я использую плагин SureFire для запуска некоторых модульных тестов и отказоустойчивый плагин для запуска некоторых интеграционных тестов. Я хотел бы способ запустить только тесты отказоустойчивого плагина.
это не хорошее решение для меня, чтобы добавить различные профили или что-нибудь в pom, потому что это многомодульная сборка, и я не хочу, чтобы редактировать pom каждого модуля.
здесь skip.tests
и maven.test.skip
и skipTests
остановка все тесты, и skipITs
, который останавливает только отказоустойчивый плагин.
Итак, есть ли флаг командной строки для Maven как skipITs
, но вместо этого с функциональностью "onlyITs"?
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