小编典典

Spring Boot和JUnit 5之间的交互-必须使用整体工件,而不是个人?

spring-boot

之前曾有人问过这个问题(例如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.1Spring Boot 2.1.7.RELEASEJUnit 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()-以便证明测试方法已被跑步者接受,并且不会被默默忽略。


阅读 352

收藏
2020-05-30

共1个答案

小编典典

感谢@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用户指南》

junit-platform-runner

在JUnit 4环境中的JUnit平台上执行测试和测试套件的运行程序。

并不相关。)

2020-05-30