it-swarm.com.de

Spring-Boot-Starter-Test mit JUnit 5

Mit spring-boot-starter-test ab 2.0.6 bringt eine JUnit 4-Abhängigkeit. Wie kann ich spring-boot-starter-test (über Gradle), aber stattdessen JUnit 5 verwenden, ohne dass die JUnit 4-Abhängigkeit aktiviert wird?

Ist hier ein Teil der Abhängigkeitsausgabe von Gradle, wenn es hilft:

+--- 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


Hier ist meine build.gradle Datei:

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')
}

AKTUALISIEREN

Das Hinzufügen der JUnit 5-Abhängigkeit und das Ausführen des in den Kommentaren erwähnten Ausschlusses haben den Trick ausgeführt. Die Testabhängigkeit sieht jetzt so aus:

testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'junit', module: 'junit' //by both name and group
}
12
user605331

Ab Gradle 4.6 (glaube ich) gibt es native JUnit 5-Unterstützung. Sie können JUnit5 einfach wie folgt einbinden:

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"
}

Sie benötigen außerdem:

test {
  useJUnitPlatform()
}

JUnit 4 und 5 verwenden unterschiedliche Paketnamen, sodass sie im selben Projekt nebeneinander existieren können. Viele der Anmerkungen sind gleich (@Test, etc) so stellen Sie sicher, dass Sie sie aus dem org.junit.jupiter.api Paket.

9
Mike

Hier wird Implementierung anstelle von Kompilieren verwendet.

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'
}
3

Zehn Monate später und mit Gradle 5.4.1, Spring Boot 2.1.7.RELEASE, und JUnit 5.5.1, Ich habe festgestellt, dass ich eine andere Abhängigkeit als die anderen Antworten verwendet habe. Außerdem habe ich festgestellt, dass es besser ist, das aggregierte Artefakt als die einzelnen Artefakte einzuschließen:

testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

Sie können mehr über meine Beobachtung von diesem anderen sehen SO Q & A von mir: Wechselwirkung zwischen Spring Boot und JUnit 5 - müssen die Gesamtartefakte nicht die Einzelpersonen verwenden?

2
leeyuiwah