maven: как я могу пропустить тест в некоторых проектах с помощью параметров командной строки?
в моем проекте maven у меня есть несколько модулей. Можно ли отключить выполнение модульного теста для некоторых модулей с помощью параметров командной строки?
мой проект занимает около 15 минут, чтобы запустить все модульные тесты. Я хотел бы ускорить общую сборку, запустив только модульные тесты в модуле, над которым я работаю. Я не хочу входить и редактировать каждый отдельный pom.XML для достижения этой цели.
Я попробовал решение, описанное здесь: Могу ли я запустить конкретный тест testng группа через maven? Однако результатом является множество провалов тестирования в модулях, которые я хочу пропустить. Я полагаю, что "группа" - это не то же самое понятие модуля?
4 ответов:
для включения и выключения модульных тестов для всего проекта используйте возможность плагина maven Surefire пропускать тесты. Есть недостаток в использовании скиптестов из командной строки. В сценарии многомодульной сборки это отключит все тесты во всех модулях.
Если вам нужен более мелкозернистый контроль выполнения подмножества тестов для модуля, посмотрите на использование включение и исключение теста плагина maven Surefire возможности.
чтобы разрешить переопределения командной строки, используйте свойства POM при настройке плагина Surefire. Возьмем для примера следующий сегмент POM:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <excludes> <exclude>${someModule.test.excludes}</exclude> </excludes> <includes> <include>${someModule.test.includes}</include> </includes> </configuration> </plugin> </plugins> </build> <properties> <someModule.skip.tests>false</someModule.skip.tests> <skipTests>${someModule.skip.tests}</skipTests> <someModule.test.includes>**/*Test.java</someModule.test.includes> <someModule.test.excludes>**/*Test.java.bogus</someModule.test.excludes> </properties>С POM, как указано выше, вы можете выполнять тесты различными способами.
- выполнить все тесты (приведенная выше конфигурация включает все **/*тесты.исходные файлы тестов java)
mvn test
- пропустить все тесты по всем модули
mvn -DskipTests=true test
- пропустить все тесты для конкретного модуля
mvn -DsomeModule.skip.tests=true test
- запускайте только определенные тесты для определенного модуля (этот пример включает все **/*IncludeTest.исходные файлы тестов java)
mvn -DsomeModule.test.includes="**/*IncludeTest.java" test
- исключить определенные тесты для конкретного модуля (в этом примере исключаются все **/*ExcludeTest.исходный код Java файлы)
mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test
...и если вы хотите передать параметр Maven release plugin в Hudson / Jenkins, вы должны использовать
-Darguments=-DskipTestsчтобы заставить его работать.
Если вы хотите использовать профили Maven:
вы можете заставить его работать, делая что-то вроде этого:
Я не знаю, есть ли поддерживаемый параметр командной строки, который делает то же самое.
вы также можете попробовать использовать свойства среды непосредственно, что-то согласно этой странице документа:
т. е. что-то вроде:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12</version> <configuration> <skipTests>${moduleA.skipTests}</skipTests> </configuration> </plugin>затем с помощью
mvn -DmoduleA.skipTests=false testчтобы проверить этот один модуль.
нашел способ исключить из командной строки:
# Exclude one test class, by using the explanation mark (!) mvn test -Dtest=!LegacyTest # Exclude one test method mvn verify -Dtest=!LegacyTest#testFoo # Exclude two test methods mvn verify -Dtest=!LegacyTest#testFoo+testBar # Exclude a package with a wildcard (*) mvn test -Dtest=!com.mycompany.app.Legacy*Это от:https://blog.jdriven.com/2017/10/run-one-or-exclude-one-test-with-maven/
Comments