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

laik7k3q  于 12个月前  发布在  Maven
关注(0)|答案(3)|浏览(144)

在迁移我的主项目之前,我尝试在我的副项目中试用JUnit 5。我想使用@Nested tests来使我的测试类更干净。
当我运行整个测试套件时,一切都很好。然而,当我尝试运行单个测试时,@嵌套的测试不会被执行。

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

字符串
有没有办法让它运行选定的类和所有@嵌套的类?
使用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() { }
  }
}

kokeuurv

kokeuurv1#

要运行所有嵌套的类,你只需要在类名的末尾添加一个“*”。比如:

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

字符串

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

qyuhtwio

qyuhtwio2#

面对同样的问题,然后意识到我的父测试类名和.java文件名是不同的。我用右键>重构>重写将我的测试类名更改为我的.java文件名(对于可能的引用问题)。最后用以下命令运行我的测试:
第一个月
顺便说一下,我使用的是maven-surefire-plugin 2.22.2版本。

2nc8po8w

2nc8po8w3#

整个问题是嵌套测试是以与匿名类相同的方式编译的类,其名称包含**$**。

**/*$*

字符串
如果你使用lambda,那么这些排除会变得越来越重要。这也应该起作用:

mvn test -Dexcludes=nonetest

相关问题