使用Maven Surefire运行嵌套的JUnit 5测试

时间:2018-03-23 15:33:47

标签: maven junit nested maven-surefire-plugin junit5

在迁移我的主项目之前,我试图在我的项目中使用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() { }
  }
}

3 个答案:

答案 0 :(得分:2)

要运行所有嵌套的类,您只需要在类名的末尾添加“ *”即可。像这样:

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

答案 1 :(得分:0)

面对相同的问题,然后意识到我的父级测试类名和.java文件名不同。我通过右键单击>重构>重命名将测试类名更改为.java文件名(可能存在参考问题)。最后使用以下命令运行我的测试:

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

顺便说一下,我使用的是maven-surefire-plugin 2.22.2版本。

答案 2 :(得分:0)

整个问题是嵌套测试是与名称包含 $ 的匿名类相同的编译类。 Surefire和Failsafe通过默认模式排除了这些

**/*$*

如果使用lambda,则这些排除变得越来越重要。 这也应该工作:

mvn test -Dexcludes=nonetest