maven: как я могу пропустить тестирование в некоторых проектах с помощью параметров командной строки? - PullRequest
60 голосов
/ 03 февраля 2012

В моем проекте Maven у меня есть несколько модулей. Можно ли отключить запуск модульного теста для некоторых модулей с помощью параметров командной строки?

Мой проект занимает около 15 минут, чтобы пройти все юнит-тесты. Я хотел бы ускорить общую сборку, запустив только модульные тесты в модуле, над которым я работаю. Я не хочу входить и редактировать каждый отдельный pom.xml для достижения этой цели.

Я попробовал решение, изложенное здесь: Могу ли я запустить определенную группу тестирования testng через maven? Однако в результате возникает множество сбоев в модулях, которые я хочу пропустить. Я полагаю, «группа» - это не одно и то же понятие модуля?

Ответы [ 4 ]

81 голосов
/ 04 февраля 2012

Для включения и выключения модульных тестов для всего проекта используйте Возможность плагина Maven Surefire Plugin пропускать тесты .Недостатком является использование skipTests из командной строки.В многомодульном сценарии это приведет к отключению всех тестов во всех модулях.

Если вам нужен более точный контроль за выполнением подмножества тестов для модуля, изучите использование плагина 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, подобного описанному выше, вы можете выполнять тесты различными способами.

  1. Запускать все тесты (приведенная выше конфигурация включает в себявсе ** / * Test.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
13 голосов
/ 12 декабря 2012

… и если вы хотите передать параметр плагину релиза maven в Hudson / Jenkins, вы должны использовать -Darguments=-DskipTests чтобы заставить его работать.

4 голосов
/ 03 февраля 2012

Если вы хотите использовать профили 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 проверить один модуль.

3 голосов
/ 18 июня 2018

Найден способ исключить из командной строки:

# 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...