Как запустить все тесты в определенном пакете с Maven?
Я могу найти в Maven docs, где он показывает, как работать:
- Один тест
- Все тесты в одном классе тестов
- Все тесты в классах, соответствующих определенному шаблону
Но как запустить все тесты в пакете? Возможно ли это?
Я бы предпочел решения, которые не требуют изменения pom.xml
или кода.
Ответы
Ответ 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
Подробнее...