Запускать вложенные тесты JUnit 5 с Maven Surefire

Я пытаюсь использовать JUnit 5 в моем побочном проекте в качестве пробной версии перед переносом основного проекта. Я бы хотел использовать @Nested тесты, чтобы мои тестовые классы были чище.
Когда я прогнал свой набор тестов в целом, все в порядке. Однако, как только я пытаюсь запустить только один тест, @Nested не выполняются.

mvn -Dtest=com.mycompany.test.MyTest surefire:test

Есть ли способ заставить его запустить выбранный класс и все @Nested?

Использование JUnit 5.1.0, платформа JUnit 1.1.0

<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <dependencies>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>${org.junit.platform.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${org.junit.version}</version>
      </dependency>
    </dependencies>
  </plugin>
</plugins>
</build>

Тестовый класс:

public class MyTest {

  @Test
  public void thisTestExecutes() { }

  @Nested
  public class NestedTests {
    @Test
    public void thisTestDoesnt() { }
  }
}

person Mateusz Wierciński    schedule 23.03.2018    source источник
comment
Мне кажется, что это ошибка в нашем провайдере Surefire. Не могли бы вы открыть вопрос на GitHub? github.com/junit-team/junit5/issues/new   -  person Marc Philipp    schedule 24.03.2018
comment
Спасибо, Марк, только что сделал это: github.com/junit-team/junit5/issues/1343   -  person Mateusz Wierciński    schedule 26.03.2018
comment
Спасибо, Матеуш!   -  person Marc Philipp    schedule 26.03.2018
comment
Вы пытались обновить версию maven-surefire-plugin до 2.22.0 или более поздней? (см. мой ответ https://stackoverflow.com/questions/53433663/maven-not-running-junit-5-tests/53433724#53433724)   -  person LaurentG    schedule 06.02.2019


Ответы (3)


Чтобы запустить все вложенные классы, вам просто нужно добавить * в конце имени класса. Что-то типа:

mvn -Dtest=com.mycompany.test.MyTest\* surefire:test
person Douglas Silva    schedule 10.06.2020

Столкнувшись с той же проблемой, я понял, что имя моего родительского тестового класса и имя файла .java отличаются. Я изменил имя тестового класса на имя файла .java, щелкнув правой кнопкой мыши ›Рефакторинг› Переименовать (для возможной справочной проблемы). Наконец, запустите мой тест с помощью следующей команды:

mvn -Dtest=com.mycompany.test.MyTest*

Кстати, я использую версию maven-surefire-plugin 2.22.2.

person Emir Gündüz    schedule 03.07.2020

Вся проблема в том, что вложенные тесты - это классы, скомпилированные так же, как анонимные классы с именем, содержащим $. Surefire и Failsafe исключают их по шаблону по умолчанию

**/*$*

Если вы используете лямбда, эти исключения становятся все более важными. Это тоже должно сработать:

mvn test -Dexcludes=nonetest
person tibor17    schedule 03.07.2020