Не удается запустить категорию в тестах Junit4

#maven #junit #maven-surefire-plugin

#maven #junit #maven-верный плагин

Вопрос:

Есть метод тестирования, аннотированный с помощью category:

 public interface BVT {} //is placed in package net.test.categories, file name BVT.java

public class TestClass{
    @Test
    @Category(BVT.class)
    public void someTest(){
        System.out.println("smoke");
    } }
  

Я использую Junit 4.12 и surefire 3.0.0-M3

 <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <forkCount>${threadCount}</forkCount>
        <reuseForks>false</reuseForks>
        <skip>false</skip>
        <groups>${testGroup}</groups>
    </configuration>
</plugin>
  

Если я попытаюсь запустить тест из категории BVT

  mvn clean test -DtestGroup="net.test.categories.BVT"
  

Я получаю

 [INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
  

Понятия не имею, почему тест не был запущен / пропущен…
Использование созданного в профиле pom не помогло — он просто запускает все тесты.
Добавление этой зависимости runner также не помогает:

 <dependencies>
    <dependency>
        <groupId>org.apache.maven.surefire</groupId>
        <artifactId>surefire-junit47</artifactId>
        <version>3.0.0-M3</version>
    </dependency>
</dependencies>
  

Создание набора запускает необходимый тест, но я не хочу перечислять все необходимые классы в этом классе suite, просто хочу запустить определенную группу из командной строки

Комментарии:

1. Удалите зависимость surefire-junit47. Позвольте surefire-maven-plugin. решите сами.

2. @khmarbaise, ну, я попытался добавить, а затем удалил эту зависимость. Это не помогает

Ответ №1:

Из документации:

Вы можете использовать категории JUnit с помощью groups параметра.

Использование mvn -D... задает системное свойство, а не параметр плагина.

Итак, вам нужно что-то вроде:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        ...
        <groups>${myGroup}</groups>
    </configuration>
</plugin>
  

И запустите его с mvn ... -DmyGroup="net.test.categories.BVT"

Комментарии:

1. Это не помогает. Я уже пытался добавить <groups>net.test.categories.BVT</groups> непосредственно в pom.xml и это не сработало

2. @Roman В этом случае я бы сказал, что происходит что-то еще. Можете ли вы удалить все категории и затем запустить свой тест?

3. Я могу запускать тесты без категорий. Также я могу запускать тесты по категориям из наборов, но мне не нравится это решение.

Ответ №2:

Не нашел причину, но добавление раздела включения в конфигурацию surefire решило проблему.

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <forkCount>${threadCount}</forkCount>
        <reuseForks>false</reuseForks>
        <skip>false</skip>
        <groups>${testGroup}</groups>
        <includes>
            <include>*</include>
        </includes>
    </configuration>
</plugin>
  

Комментарии:

1. Если это решение, то ваши тестовые примеры не соответствуют соглашениям об именовании по умолчанию, описанным здесь maven.apache.org/surefire/maven-surefire-plugin/examples /…