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

Как запустить тесты 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, поэтому мне было интересно, есть ли подобное средство, которое я могу использовать?

4b9b3361

Ответ 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