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

Kotlin中Mockito-inline依赖冲突导致无法Mock Final类问题

解决Mockito-inline与Mockito-android的依赖冲突问题

嘿,这个问题我之前在项目里也碰到过,核心原因很明确:mockito-android和mockito-inline这两个依赖包都包含了同一个mockito-extensions/org.mockito.plugins.MockMaker配置文件。当你同时在androidTestImplementation里引入这俩时,Gradle检测到重复文件,就会抛出你看到的那个错误。

如果只删掉仪器测试里的mockito-inline,又会因为仪器测试环境没有inline的MockMaker支持,没法Mock Kotlin的final类。下面给你两个靠谱的解决办法:

方法一:通过打包配置排除重复文件

你可以保留androidTestImplementation里的mockito-inline,同时在Gradle里配置packagingOptions,把mockito-android带来的重复文件排除掉。这样就能保留mockito-inline的final类Mock能力,同时不丢mockito-android的Android适配功能。

Groovy 版本(build.gradle)

android {
    // 其他已有配置...
    packagingOptions {
        exclude 'mockito-extensions/org.mockito.plugins.MockMaker'
    }
}

Kotlin DSL 版本(build.gradle.kts)

android {
    // 其他已有配置...
    packagingOptions {
        exclude("mockito-extensions/org.mockito.plugins.MockMaker")
    }
}

方法二:使用Mockito官方的Android专用inline依赖(更推荐)

其实Mockito早就出了专门给Android仪器测试用的inline整合包——mockito-android-inline,它把mockito-android的Android适配和mockito-inline的final类Mock能力整合到一起了,完全不会有文件冲突。你只需要把仪器测试里的两个依赖替换成这一个就行:

替换前的依赖

androidTestImplementation "org.mockito:mockito-android:2.13.0"
androidTestImplementation 'org.mockito:mockito-inline:2.13.0'

替换后的依赖

androidTestImplementation "org.mockito:mockito-android-inline:2.13.0"

另外给你个小建议:单元测试(testImplementation)里的依赖可以简化一下,mockito-inline已经包含了mockito-core的所有功能,所以你可以删掉单独的mockito-core依赖,避免冗余。调整后的单元测试依赖大概是这样:

testImplementation 'junit:junit:4.12'
testImplementation 'au.com.dius:pact-jvm-consumer-junit_2.11:3.5.10'
testImplementation "org.mockito:mockito-inline:2.13.0"
testImplementation 'org.assertj:assertj-core:3.8.0'

这样配置完,不管是单元测试还是仪器测试,都能正常Mock Kotlin的final类,也不会有构建冲突啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:54