Запретить модульные тесты, но разрешить интеграционные тесты в 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