Как запустить тесты JUnit по категориям в Maven?
Используя JUnit 4.8 и новые аннотации @Category
, есть ли способ выбрать подмножество категорий для запуска с плагином Maven Surefire?
Например у меня есть:
@Test
public void a() {
}
@Category(SlowTests.class)
@Test
public void b() {
}
И я хотел бы запустить все медленные тесты, как в: (обратите внимание, что -Dtest.categories был составлен мной...).
mvn test -Dtest.categories=!SlowTests // run non-slow tests
mvn test -Dtest.categories=SlowTests // run only slow tests
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests
mvn test // run all tests, including non-categorized
Итак, дело в том, что я не хочу создавать наборы тестов (Maven просто выбирает все модульные тесты в проекте, что очень удобно), и я бы хотел, чтобы Maven мог выбирать тесты по категориям. Я думаю, что я только что составил -Dtest.categories, поэтому мне было интересно, есть ли подобное средство, которое я могу использовать?
Ответы
Ответ 1
Maven с тех пор обновляется и может использовать категории.
Пример из Документация Surefire:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<groups>com.mycompany.SlowTests</groups>
</configuration>
</plugin>
Это будет запускать любой класс с аннотацией @Category(com.mycompany.SlowTests.class)
Ответ 2
Основываясь на этом сообщении в блоге - и упростите - добавьте это в свой pom.xml:
<profiles>
<profile>
<id>SlowTests</id>
<properties>
<testcase.groups>com.example.SlowTests</testcase.groups>
</properties>
</profile>
<profile>
<id>FastTests</id>
<properties>
<testcase.groups>com.example.FastTests</testcase.groups>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.13</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.13</version>
</dependency>
</dependencies>
<configuration>
<groups>${testcase.groups}</groups>
</configuration>
</plugin>
</plugins>
</build>
то в командной строке
mvn install -P SlowTests
mvn install -P FastTests
mvn install -P FastTests,SlowTests
Ответ 3
У меня был аналогичный случай, когда я хочу запустить все тесты EXCEPT для определенной категории (например, потому что у меня есть сотни устаревших тестов без рубрики, и я не могу/не хочу изменять каждый из них)
Плагин maven surefire позволяет исключать категории, например:
<profiles>
<profile>
<id>NonSlowTests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>my.category.SlowTest</excludedGroups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Ответ 4
Ты можешь использовать
mvn test -Dgroups="com.myapp.FastTests, com.myapp.SlowTests"
Но убедитесь, что вы правильно настроили плагин maven surefire
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12.2</version>
</dependency>
</dependencies>
</plugin>
См. Документы в: https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html.
Ответ 5
Я потерял много времени на этой ошибке "groups/excludedGroups требуют TestNG или JUnit48 + в пути к тестовому пути проекта", потому что я думал, что использую плохую версию junit или плохую версию плагина surefire или комбинацию, которая делает не подходит.
Это не было: в моем проекте у меня был модуль "config", который был создан перед модулем, который я хотел протестировать. У этого модуля не было junit-зависимостей → у него не было junit на пути к классам...
Эта ошибка может помочь другим...
Ответ 6
Не совсем то же самое, но используя плагин surefire, тестовые классы можно выбрать на основе имени файла. Вы не используете категории Junit.
Пример для запуска только тестов DAO.
<executions>
<execution>
<id>test-dao</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/com/proy/core/dao/**/*Test.java</include>
</includes>
</configuration>
</execution>
http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html