之前曾有人问过这个问题(例如here),但我的观察与先前报告的观察结果并不相同。
我注意到要使JUnit 5正常工作,我必须包括整个JUnit 5工件
testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
如果我改为包含各个工件,那么将不会进行JUnit测试
testImplementation('org.junit.platform:junit-platform-runner:1.3.1') testImplementation('org.junit.platform:junit-platform-launcher:1.0.0') testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1') testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1') testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1') testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1')
有人看过类似的东西吗?
(我还通过非Spring-Boot项目进行了尝试-在这种情况下,可以包含单个工件。这引起了很多混乱。)
这里我用gradle显示结果,但是我用maven也有类似结果。
我使用Gradle 5.4.1,Spring Boot 2.1.7.RELEASE和JUnit 5.5.1
Gradle 5.4.1
Spring Boot 2.1.7.RELEASE
JUnit 5.5.1
我在下面包括完整build.gradle课程和测试课程
build.gradle
plugins { id 'org.springframework.boot' version '2.1.7.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation('org.junit.jupiter:junit-jupiter:5.5.1') // testImplementation('org.junit.platform:junit-platform-runner:1.3.1') // testImplementation('org.junit.platform:junit-platform-launcher:1.0.0') // testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1') // testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1') // testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1') // testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1') } test { useJUnitPlatform() }
DemoApplicationTest.java
package com.example.demo; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class DemoApplicationTests { @Test public void failMe() { Assertions.assertTrue(Boolean.FALSE); } }
请注意,在这种情况下,我期望测试方法中会引发异常failMe()-以便证明测试方法已被跑步者接受,并且不会被默默忽略。
failMe()
感谢@johanneslink的提示(在开始提问的评论中),现在我认为我对问题的理解更好:
最好使用聚合工件
如果您确实要使用单个工件,请确保它们的版本兼容
这种组合会起作用
testImplementation('org.junit.platform:junit-platform-launcher:1.5.1') testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1') testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
但这不是
testImplementation('org.junit.platform:junit-platform-launcher:1.3.1') testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1') testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
(其他三个工件不相关,因此在此省略它们。例如,根据《JUnit 5用户指南》
junit-platform-runner 在JUnit 4环境中的JUnit平台上执行测试和测试套件的运行程序。
junit-platform-runner
在JUnit 4环境中的JUnit平台上执行测试和测试套件的运行程序。
并不相关。)