我运行mvn clean package
,除套件测试外,所有其他测试都运行。我正在运行 Junit 4 和 5 测试 - @Rules测试运行,@RegisterExtension/@ExtendWith 测试也运行。不确定为什么套件无法运行 - 任何想法?
代码如下:
测试套件
@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})
public class SuiteTest {
}
SuiteTest
调用的测试
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class TestingSuite {
@Test
public void add_2_plus_1(){
Assertions.assertThat(2 + 1).isEqualTo(3);
}
}
聚 甲醛
<junit-jupiter-engine.version>5.5.0</junit-jupiter-engine.version>
<junit-platform-runner.version>1.5.0</junit-platform-runner.version>
<!-- ellided -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit-jupiter-engine.version}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit-jupiter-engine.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit-platform-runner.version}</version>
</dependency>
<!-- ellided -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
Maven、Java 和 OS 详细信息
mvn11 --version Sun Jul 21 14:43:24 EDT 2019
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.5.4/libexec
Java version: 11.0.1, vendor: Oracle Corporation, runtime: /Users/me/Downloads/jdk-11.0.1.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"
所以我复制了你的问题。运行时
mvn clean test
我得到了以下输出(以及许多其他输出(:
Juli 23, 2019 8:17:30 VORM. org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder buildRunner
WARNING: Ignoring test class using JUnitPlatform runner: com.example.project.SuiteTest
这就是为什么我查找了DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder
代码并发现了以下注释:
/**
* Customization of {@link AnnotatedBuilder} that ignores classes annotated
* with {@code @RunWith(JUnitPlatform.class)} to avoid infinite recursion.
*/
private static class DefensiveAnnotatedBuilder extends AnnotatedBuilder {...}
这强烈建议使用@RunWith(JUnitPlatform.class)
的套件在通过平台机制运行时被忽略。您可能会问 junit 5 团队是否有明确的方法来关闭该安全机制,但我想没有。
我建议你扩展maven-surefire-plugin的配置,以模仿你在套件中所做的:
@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})
可以翻译成类似的东西
<include>com.company.platform.test.suite/*Suite.java</include>
不过我没有测试它。