En utilisant spring-boot-starter-test
à partir de la version 2.0.6 introduit une dépendance JUnit 4. Comment puis-je utiliser spring-boot-starter-test
(via Gradle), mais utilisez plutôt JUnit 5 sans que la dépendance de JUnit 4 soit extraite?
Voici une partie de la sortie de dépendance de Gradle si cela vous aide:
+--- 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
Voici mon build.gradle fichier:
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()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-jdbc')
implementation('org.springframework.boot:spring-boot-starter-security')
implementation('org.springframework.boot:spring-boot-starter-thymeleaf')
implementation('org.springframework.boot:spring-boot-starter-validation')
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.liquibase:liquibase-core')
runtimeOnly('org.springframework.boot:spring-boot-devtools')
runtimeOnly('org.postgresql:postgresql')
testImplementation('org.springframework.boot:spring-boot-starter-test')
testImplementation('org.springframework.security:spring-security-test')
implementation('org.glassfish.jaxb:jaxb-runtime:2.3.1')
implementation('org.glassfish.jaxb:jaxb-runtime2.3.1')
implementation('org.springframework.boot:spring-boot-starter-data-redis')
testCompile('org.junit.jupiter:junit-jupiter-api:5.3.1')
testCompile('org.junit.jupiter:junit-jupiter-params:5.3.1')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.1')
}
L'ajout de la dépendance à JUnit 5 et la suppression de l'exclusion mentionnée dans les commentaires ont fait l'affaire. La dépendance de test ressemble maintenant à ceci:
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'junit', module: 'junit' //by both name and group
}
À partir de la version 4.6 (je crois), il existe un support natif de JUnit 5. Vous pouvez simplement inclure JUnit5 comme suit:
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"
}
Vous aurez également besoin de:
test {
useJUnitPlatform()
}
JUnit 4 et 5 utilisent des noms de paquetages différents, ils peuvent donc coexister dans le même projet. Bon nombre des annotations sont les mêmes (@Test
, etc.) alors assurez-vous de les inclure à partir de la org.junit.jupiter.api
paquet.
Voici en utilisant implémentation au lieu de compiler.
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'
}
Dix mois plus tard, et en utilisant Gradle 5.4.1
, Spring Boot 2.1.7.RELEASE
, et JUnit 5.5.1
, J’ai trouvé que j’utilisais une dépendance différente de celle des autres réponses. De plus, j'ai trouvé qu'il était préférable d'inclure l'artefact global plutôt que les artefacts individuels:
testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
Vous pouvez en savoir plus sur mon observation de cet autre SO Mes questions et réponses: Interaction entre Spring Boot et JUnit 5 - devez-vous utiliser les artefacts globaux et non les individus?