Spring Boot 和 JUnit 5 之间的交互——必须使用整体工件而不是个人?
Interaction between Spring Boot and JUnit 5 -- must use the overall artifacts not the individuals?
之前有人问过这个问题(例如),但我的观察与之前报道的不一样。
我注意到要使 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
我包括完整的 build.gradle
和下面的测试 class
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()
—— 以证明测试方法已被运行器拾取并且没有被默默地忽略。
感谢@johanneslink 的提示(在开场问题的评论中),现在我想我对问题有了更好的理解:
还是用聚合神器比较好
testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
如果您真的想使用各个工件,请确保它们的版本兼容
这个组合可行
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 User Guide
junit-platform-runner
Runner for executing tests and test suites on the JUnit Platform in a JUnit 4 environment.
与此处无关。)
之前有人问过这个问题(例如
我注意到要使 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
我包括完整的 build.gradle
和下面的测试 class
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()
—— 以证明测试方法已被运行器拾取并且没有被默默地忽略。
感谢@johanneslink 的提示(在开场问题的评论中),现在我想我对问题有了更好的理解:
还是用聚合神器比较好
testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
如果您真的想使用各个工件,请确保它们的版本兼容
这个组合可行
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 User Guide
junit-platform-runner
Runner for executing tests and test suites on the JUnit Platform in a JUnit 4 environment.
与此处无关。)