猿问

使用 JUnit 5 进行 spring-boot-starter-test

spring-boot-starter-test从 2.0.6 开始使用会引入 JUnit 4 依赖项。我如何使用spring-boot-starter-test(通过 Gradle),但使用 JUnit 5,而不引入 JUnit 4 依赖项?


如果有帮助,这是 Gradle 依赖项输出的一部分:


+--- org.springframework.boot:spring-boot-starter-test -> 2.0.5.RELEASE

|    +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*)

|    +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE

|    |    \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*)

|    +--- org.springframework.boot:spring-boot-test-autoconfigure:2.0.5.RELEASE

|    |    +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE (*)

|    |    \--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE (*)

|    +--- com.jayway.jsonpath:json-path:2.4.0

|    |    +--- net.minidev:json-smart:2.3

|    |    |    \--- net.minidev:accessors-smart:1.2

|    |    |         \--- org.ow2.asm:asm:5.0.4

|    |    \--- org.slf4j:slf4j-api:1.7.25

|    +--- junit:junit:4.12

|    |    \--- org.hamcrest:hamcrest-core:1.3


这是我的build.gradle文件:


buildscript {

    ext {

        springBootVersion = '2.0.6.RELEASE'

    rootGradleDir = "${rootProject.rootDir}/gradle"

    }

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }

}


apply plugin: 'java'

apply plugin: 'idea'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'


apply from: "${rootGradleDir}/staticCodeAnalysis.gradle"


group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8


repositories {

    mavenCentral()

}


test {

  useJUnitPlatform()

}



Cats萌萌
浏览 291回答 3
3回答

四季花海

从 Gradle 4.6(我相信)开始,有原生的 JUnit 5 支持。您可以只包含 JUnit5,如下所示:dependencies {  testCompile "org.junit.jupiter:junit-jupiter-api:5.2.0"  testCompile "org.junit.jupiter:junit-jupiter-params:5.2.0"  testRuntime "org.junit.jupiter:junit-jupiter-engine:5.2.0"}您还需要:test {  useJUnitPlatform()}JUnit 4 和 5 使用不同的包名,因此它们可以共存于同一个项目中。许多注释是相同的(@Test等),因此请确保将它们包含在org.junit.jupiter.api包中。

温温酱

对其他贡献者提到的一些补充说明:使用 Spring Boot > 2.4.0如果您使用的是 Spring Boot > 2.4.0,那么您无需执行任何操作即可使用 JUnit 5 Jupiter,因为该spring-boot-starter-test库不再包含 Vintage-engine 依赖项(它可传递地包含 JUnit 4),只需将 starter 依赖项包含到项目中即可你可以走了。使用useJUnitPlatform()的摇篮配置。使用 2.4.0 > Spring Boot > 2.2.0如果您使用早期版本,我建议您使用高于 的版本2.2.0.RELEASE,这是 Spring 团队在spring-boot-starter-test默认情况下添加对 JUnit 5 Jupiter 的支持的地方。在这些版本中,该库还包含 Vintage Engine 依赖项,可用于使用 JUnit 5 Jupiter 平台运行 JUnit 4 测试。如果您不需要执行 JUnit 4 测试,那么 spring 团队建议排除org.junit.vintage:junit-vintage-engine(不仅仅是junit如描述中所示):testCompile('org.springframework.boot:spring-boot-starter-test') {     exclude group: 'org.junit.vintage'}useJUnitPlatform()当然,您还需要在这里配置指令。

蝴蝶刀刀

这是使用implementation而不是compile。test {  useJUnitPlatform()}dependencies {    testImplementation('org.springframework.boot:spring-boot-starter-test') {        exclude group: 'junit', module: 'junit'    }    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2'    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.4.2'    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.2'}更新 2020-10-29在我们的 Spring Boot 2.3 项目中,我们不再需要这个片段。默认情况下,它已经在使用 JUnit 5。
随时随地看视频慕课网APP

相关分类

Java
我要回答