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

Kotlin & Mockito单元测试在Gradle中失败,本地Android Studio运行正常

解决Gradle运行单元测试时Mockito无法Mock Final类的问题

这种情况我之前也踩过坑——明明IDE里跑单元测试一切正常,用./gradlew test命令行执行就报错,核心原因大概率是Mockito inline扩展的配置没有完全生效,或者存在依赖、缓存的隐性问题。下面是几个你可以逐一排查的关键点:

1. 手动添加Mockito inline的配置文件

仅仅在Gradle里引入mockito-inline依赖有时候还不够,你需要创建一个配置文件来明确启用inline mock maker:

  • 在项目中创建路径:src/test/resources/mockito-extensions
  • 在该目录下新建文件org.mockito.plugins.MockMaker
  • 文件内只需要写入一行内容:mock-maker-inline

IDE运行测试时可能会自动识别依赖并启用扩展,但Gradle命令行执行时需要这个配置文件明确指定mock策略,否则还是会用默认的mock maker,自然无法处理final类。

2. 确保Mockito依赖版本完全一致

检查你项目中所有Mockito相关依赖(比如mockito-core)的版本是否和mockito-inline完全匹配。如果存在版本冲突,Gradle会自动选择某一个版本,可能导致inline扩展被旧版的核心依赖覆盖。

你可以用./gradlew dependencies命令查看testImplementation的依赖树,若发现不同版本的Mockito组件,要么统一所有Mockito依赖的版本,要么在mockito-inline依赖中排除旧版核心库:

testImplementation("org.mockito:mockito-inline:2.18.0") {
    exclude group: 'org.mockito', module: 'mockito-core'
}

3. 清理Gradle缓存重试

有时候Gradle的缓存会导致依赖没有正确更新,你可以尝试清理缓存后重新运行测试:

./gradlew clean test --no-build-cache

4. 确认测试变体的依赖配置

如果你是针对特定构建变体(比如debug、release)运行测试,要确保mockito-inline依赖是添加到对应变体的测试配置中(比如debugTestImplementation)。不过一般单元测试用全局的testImplementation就足够,但如果你的测试绑定了特定变体,可以检查下依赖配置是否正确。

5. 检查Android Gradle Plugin版本兼容性

部分旧版本的AGP可能和Mockito inline扩展存在兼容性问题,如果你用的是较老的AGP版本(比如低于7.0),可以尝试升级到稳定版本,大概率能解决隐性的兼容问题。

按照上面的步骤排查一遍,应该就能解决Gradle命令行运行时无法mock final类的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:07