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

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

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

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

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

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

4b9b3361

Ответ 1

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

 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
    

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

Ответ 2

AFAIK нет параметра командной строки для surefire: 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

Ответ 3

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*

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

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*

Ответ 4

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

Ответ 5

Версия pom.xml ответа O Badr:

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

Ответ 6

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

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

например: Я в моем /home/repository, и я хочу запускать тесты только в папке /home/repository/service

Здесь служебная папка находится внутри моей текущей папки.

Ответ 7

Вы можете указать пакеты в вашем pom.xml через Surefire-plugin

<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. и версия surefire должна быть 2.19.1 Подробнее...