【问题标题】:Run nested JUnit 5 tests with Maven Surefire使用 Maven Surefire 运行嵌套的 JUnit 5 测试
【发布时间】:2018-09-02 08:18:55
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 我必须删除那个反斜杠才能让它工作,可能是因为我在 Windows 上,但 * 不需要为我转义。
  • 只运行一个嵌套类,-Dtest:OuterClass$NestedClass
  • 在嵌套类中只运行一个测试,-Dtest:OuterClass$NestedClass#methodName
  • @AlexanderTaylor 这是特定于实现的,它可以在任何 Java 版本中更改;但我不知道更好的方法
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    **/*$*
    

    如果您使用 lambda,那么这些排除项变得越来越重要。 这也应该有效:

    mvn test -Dexcludes=nonetest
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2012-12-04
      • 2020-10-10
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多