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

Mockito版本升级后本地测试通过但Jenkins测试失败原因排查

Mockito升级后Jenkins测试失败但本地正常的原因分析

问题背景

我们仓库原本在build.gradle中配置Mockito依赖为"org.mockito:mockito-inline:4.11.0",现在替换为"org.mockito:mockito-core:5.14.2"。本地使用JDK 17 + Gradle在IntelliJ中运行单元测试全部通过,但同样使用JDK 17的Jenkins构建时,大量测试抛出异常(见附图)。此前未升级时,本地与Jenkins测试均正常通过。

可能的原因

  • Gradle依赖缓存不一致:本地Gradle缓存已更新至Mockito 5.14.2的完整依赖,但Jenkins构建环境可能残留旧版本Mockito(如mockito-inline的依赖或冲突子依赖),导致依赖解析混乱。可在Jenkins构建前执行./gradlew clean build --refresh-dependencies强制清理缓存并刷新依赖。
  • Mockito功能模块缺失:mockito-inline是专门用于处理final类/方法、静态方法等mock场景的扩展模块,而mockito-core本身不包含该字节码增强逻辑。Mockito 5.x中mockito-inline已独立为单独模块,若你的测试用例依赖这些特性,仅引入mockito-core会导致Jenkins环境下无法正常mock,进而抛出异常——而IntelliJ可能自动帮你补全了相关扩展依赖或配置。
  • JDK环境细节差异:虽同为JDK 17,但本地与Jenkins的JDK可能存在差异:比如Jenkins用OpenJDK、本地用Oracle JDK,或Jenkins的JDK未配置Mockito 5.x所需的模块权限参数(如--add-opens java.base/java.lang=ALL-UNNAMED),而IntelliJ默认已配置这些参数,导致Mockito在Jenkins环境下无法正常进行字节码操作。
  • 测试执行逻辑差异:本地可能仅运行了部分测试用例,或IntelliJ的测试运行器对Mockito有特殊兼容处理;而Jenkins执行完整的test任务,触发了所有依赖mockito-inline特性的测试,暴露了问题。
  • 依赖传递冲突:Mockito 5.x的依赖树与4.x存在差异,Jenkins环境下可能引入了与Mockito 5.x冲突的其他测试库(如PowerMock、旧版本JUnit),而本地因缓存或依赖排除配置不同,未触发该冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:02:44