You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JUnit4升级JUnit5集成Mockito时出现NoSuchMethodError问题求助

解决JUnit 5 + Mockito升级中的NoSuchMethodError依赖冲突问题

这个错误的核心原因是依赖版本不兼容——你使用的Spring Boot 2.1.7.RELEASE版本相对老旧,手动指定的JUnit Jupiter、Mockito版本和Spring Boot自带的依赖管理体系冲突,导致JUnit Platform核心类出现方法缺失。下面一步步帮你修复:

1. 移除手动引入的JUnit Jupiter依赖

Spring Boot Starter Test已经内置了适配当前Boot版本的JUnit Jupiter依赖,手动指定org.junit.jupiter:junit-jupiter:5.6.2会打破版本一致性,直接删掉这行:

testImplementation("org.junit.jupiter:junit-jupiter:5.6.2")

2. 适配Spring Boot的Mockito版本

你用的mockito-junit-jupiter:3.3.3版本过高,Spring Boot 2.1.7默认适配的Mockito版本是2.23.4,高版本Mockito会和老版本Spring测试组件出现兼容性问题。直接使用Spring Boot依赖管理的版本即可:

testImplementation("org.mockito:mockito-junit-jupiter")

3. 确保Vintage引擎被彻底排除

虽然你已经在spring-boot-starter-test里排除了vintage引擎,但依赖传递可能仍有残留,添加全局配置强化排除:

configurations {
    testImplementation {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        exclude group: 'junit', module: 'junit'
    }
}

4. 清理缓存并重新构建

依赖冲突常因缓存中的旧依赖导致,执行以下命令彻底清理后重新构建:

./gradlew clean build --refresh-dependencies

修改后的完整build.gradle配置

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
    id("org.springframework.boot") version "2.1.7.RELEASE"
    id("io.spring.dependency-management") version "1.0.8.RELEASE"
    kotlin("jvm") version "1.3.50"
    kotlin("plugin.spring") version "1.3.50"
}
group = "-"
version = System.getenv("VERSION") ?: "local"
java.sourceCompatibility = JavaVersion.VERSION_12
repositories {
    mavenCentral()
}

configurations {
    testImplementation {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        exclude group: 'junit', module: 'junit'
    }
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    // 你的其他业务依赖...
    
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.mockito:mockito-junit-jupiter")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "12"
    }
}

补充说明:Spring Boot的dependency-management插件会自动维护所有官方依赖的版本兼容性,手动指定高版本很容易引发这类问题。如果项目允许,建议升级到Spring Boot 2.7.x以上的稳定版本,会大幅减少这类版本冲突问题。

内容的提问来源于stack exchange,提问作者Sattar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:47:39