Как запустить все тесты в определенном пакете с Maven? - PullRequest
46 голосов
/ 25 июля 2011

Я могу найти в Maven Docs , где он показывает, как запустить:

  1. Один тест
  2. Все тесты в одном классе
  3. Все тесты в классах, соответствующих определенному шаблону

Но как запустить все тесты в пакете? Это возможно?

Я бы предпочел решения, которые не требуют изменения pom.xml или кода.

Ответы [ 8 ]

131 голосов
/ 22 марта 2013

Вы также можете использовать шаблон, например,

 mvn '-Dtest=de.mypackage.*Test' test

запускает все тесты в классах из пакета de.mypackage , заканчивающегося *Test.

[обновление 2017/12/18]:
Поскольку это стало общепринятым ответом, вот дополнительная информация:

  • Maven использует для запуска тестов плагин Maven Surefire .
  • Синтаксис, использованный выше (полное имя пакета), требует Surefire версии 2.19.1 или выше! Более ранние версии требуют использования выражений пути, например

    mvn -Dtest="de/mypackage/*Test" test
    
  • Я использую кавычки (`или"), чтобы запретить оболочке выполнять расширение пути, Maven не требует кавычек.

  • Один метод тестирования может быть рассчитан с использованием следующего синтаксиса

    mvn -Dtest=MyUnitTest#testMethod test
    
  • Также могут быть включены все тесты из подпакетов, чтобы выполнить все тесты в пакете или под ним de.mypackage.sub выполнить:

    mvn -Dtest="de/mypackage/sub/**" test
    

    или с Surefire 2.19.1 или выше

    mvn -Dtest="de.mypackage.sub.**" test
    

Существуют и другие возможности, такие как использование регулярных выражений, см. Официальную документацию по запуску одного теста .

20 голосов
/ 25 июля 2011

AFAIK нет параметра командной строки для верного запуска: test для запуска тестов в определенном пакете.

Я использую переменную конфигурации для достижения того же эффекта. Фрагмент моего pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.7.2</version>
            <configuration>
                <includes>
                    <include>**/${testGroup}/*Test.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

Теперь, если я хочу запустить тесты в пакете с именем «com.example», я использую следующую команду:

mvn test -DtestGroup=com/example
8 голосов
/ 06 апреля 2017
mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*

... и если вы хотите включить все подпакеты:

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*
3 голосов
/ 14 марта 2018

Вы можете получить разницу из следующих сценариев:

(1) Пропустить все тесты во время сборки maven

mvn package -DskipTests

(2) Выполнить все контрольные примеры

mvn test

(3) Выполнить определенную группу тестирования

mvn test -DincludeGroups=TestGroup1,TestGroup2

(4) Исключить определенную группу тестов во время выполнения

mvn test -DexcludeGroups=TestGroup3,TestGroup4

(5) Выполнить определенные тестовые примеры пакетов

mvn test -Dtest="test.java.com.service.map.**"

(6) Выполнить специальный тест

mvn test -Dtest=Test1,Test2

Надеюсь, вам будет полезнее другое сочетание исполнения.

3 голосов
/ 16 декабря 2017

pom.xml версия ответа О Бадра:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <includes>
                 <!-- includes all tests, but not in subpackages -->
                        <include>**/package1/*</include>   
                 <!-- includes all tests, AND in subpackages -->
                        <include>**/package2/**</include>
                    </includes>
                </configuration>
            </plugin>

        </plugins>
    </build>
1 голос
/ 25 июля 2011

Возможно, это не лучший ответ, но вы можете запустить один TestSuite (который является тестом), который включает все необходимые тесты в одном пакете.

0 голосов
/ 31 августа 2017

Вы можете упомянуть пакеты в вашем pom.xml через плагин Surefire

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <includes>
                    <include>com.mycom.mydep.mypak.*, com.mycom.mydep.mypak2.*</include>
                </includes>
            </configuration>
        </plugin>

Обратите внимание, что версия JUnit должна быть больше 4.8. и версия верной должна быть 2.19.1 Подробнее см. Здесь

0 голосов
/ 14 июня 2017

Это также можно сделать с помощью

mvn clean test -Dtest="**/service/**/*.java"

, например: я нахожусь в моем / home / хранилище и хочу запускать тесты только в папке / home / repository / service * *служебная папка находится внутри моей текущей папки.

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