Как запустить тесты JUnit по категориям в Maven? - PullRequest
66 голосов
/ 23 июня 2010

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

Ответы [ 6 ]

73 голосов
/ 07 февраля 2012

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)

45 голосов
/ 18 августа 2013

На основе этого сообщения в блоге - и упрощение - добавьте это в свой 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
20 голосов
/ 03 сентября 2014

У меня был похожий случай, когда я хочу запустить все тесты, КРОМЕ данной категории (например, потому что у меня есть сотни устаревших некатегоризированных тестов, и я не могу / не хочу изменять каждый из них)

Плагин 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>
9 голосов
/ 17 февраля 2014

Вы можете использовать

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

4 голосов
/ 19 мая 2015

Я потерял много времени из-за этой ошибки: «groups / exclusiveGroups требуется TestNG или JUnit48 + для пути к классам тестов проекта», потому что я думал, что использовал плохую версию junit или плохую версию плагина surefire или комбинацию, не подходит.

Ничего подобного не было: в моем проекте у меня был модуль "config", который был собран до того модуля, который я хотел протестировать. У этого модуля не было зависимости junit -> у него не было junit на пути к классам ...

Эта ошибка может помочь другим ...

1 голос
/ 30 марта 2011

Не совсем то же самое, но используя плагин 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

...