Подтвердить что ты не робот

Maven: Как пропустить тест в некоторых проектах через параметры командной строки?

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

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

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

4b9b3361

Ответ 1

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

Если вам требуется более мелкое зерновое управление запуском подмножества тестов для модуля, изучите использование включения и исключения для тестирования Maven Surefire Plugin.

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

  • Запустите все тесты (указанная выше конфигурация включает все исходные файлы **/* Test.java).
mvn test
  1. Пропустить все тесты во всех модулях
mvn -DskipTests=true test
  1. Пропустить все тесты для определенного модуля
mvn -DsomeModule.skip.tests=true test
  1. Выполнять только определенные тесты для определенного модуля (этот пример включает все исходные файлы **/* IncludeTest.java).
mvn -DsomeModule.test.includes="**/*IncludeTest.java" test
  1. Исключить определенные тесты для определенного модуля (этот пример исключает все исходные файлы **/* ExcludeTest.java)
mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test

Ответ 2

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

Ответ 3

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