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