'TestEngine with ID 'junit-vintage' failed to discover tests - JUnitException: Failed to parse version of junit:junit: 4.13.2

I'm having a very weird issue with my Gradle config and JUnit, I have tried updating to 5.7+ but I'm getting the following exceptions:

org/junit/jupiter/api/extension/ScriptEvaluationException
java.lang.NoClassDefFoundError: org/junit/jupiter/api/extension/ScriptEvaluationException

My Gradle version is 6.8.3 by the way. On the other hand, Here is the exception that I got with the current config below, I have tried a lot of combinations of versions and libraries, hut seems that none of them work:

Caused by: org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-vintage' failed to discover tests
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:111)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:85)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:92)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
    ... 25 more
Caused by: org.junit.platform.commons.JUnitException: Failed to parse version of junit:junit: 4.13.2
    at org.junit.vintage.engine.JUnit4VersionCheck.parseVersion(JUnit4VersionCheck.java:54)
    at org.junit.vintage.engine.JUnit4VersionCheck.checkSupported(JUnit4VersionCheck.java:37)
    at org.junit.vintage.engine.JUnit4VersionCheck.checkSupported(JUnit4VersionCheck.java:32)
    at org.junit.vintage.engine.VintageTestEngine.discover(VintageTestEngine.java:62)
plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'com.palantir.docker' version '0.26.0'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

docker {
    name "{project.name}"
    dockerfile file('src/docker/Dockerfile')
    copySpec.from( jar ).rename(".*", "crm_lead_validator.jar")
    buildArgs( ['JAR_FILE':"crm_lead_validator.jar"] )
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.jeasy:easy-random-core:5.0.0'
    implementation 'io.github.openfeign:feign-jackson:9.3.1'
    implementation 'com.github.tomakehurst:wiremock:2.25.1'
    implementation 'org.mock-server:mockserver-netty:3.10.8'
    implementation 'org.mock-server:mockserver-client-java:3.10.8'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.3'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.12.3'
    implementation 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
    implementation 'io.github.openfeign:feign-okhttp:10.11'
    implementation 'io.github.openfeign:feign-slf4j:10.11'
    implementation 'io.github.openfeign:feign-gson:10.11'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
// https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher
    testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.7.2'
    testImplementation "org.junit.jupiter:junit-jupiter-engine:5.6.2"
    testImplementation "org.junit.vintage:junit-vintage-engine:5.6.2"
    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.2'

}

test {
    useJUnitPlatform()
}

Does anyone know how to make it work?

Thank you for your help.



Solution 1:[1]

Due to a bug in JUnit, junit-vintage-engine:5.6.2 did not support JUnit 4.13.2. It only supported 4.12 or 4.13. So that's why you see that exception.

That bug was fixed in JUnit 5.6.3. See https://github.com/junit-team/junit5/issues/2198 for details.

You are also mixing versions of JUnit 5 artifacts, which you should try to avoid. For example, if you want to use JUnit Platform 1.7.2, I would advise that you use JUnit Jupiter 5.7.2 and JUnit Vintage 5.7.2.

For details on how to correctly configure the JUnit versions with Spring Boot, see Gradle 5 JUnit BOM and Spring Boot Incorrect Versions.

Solution 2:[2]

I was having this error too. In my idea project file I had 2 versions of junit dependencies declared, 5.4.2 and 4.13.2. getting rid of 4.13.2 fixes the issue for me.

Solution 3:[3]

I solved this problem by adding the dependency as suggested by the spring documentation:

<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
    <exclusion>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
    </exclusion>
</exclusions>

Reference doc: Spring-Boot 7.8 - Test

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sam Brannen
Solution 2 devd
Solution 3 Wedson Quintanilha da Silva