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

Android插桩测试中Mockito初始化MockMaker报错问题咨询

Android Instrumentation 测试 Mockito 初始化报错解决方案

问题根因

mock-maker-inline是面向标准JVM环境的MockMaker实现,依赖Java Instrumentation API与JVM专属类库,Android的Dalvik/ART虚拟机不支持这套能力。手动添加该配置后,即使引入了mockito-android依赖,Mockito也会强制加载JVM专用的InlineByteBuddyMockMaker,最终抛出类找不到的异常。

解决方法

根据是否需要mock final类、静态方法,二选一即可:

方案1:不需要mock final类、静态方法

直接删除手动创建的src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker配置文件。

  • mockito-android依赖已经内置了适配Android虚拟机的MockMaker实现,删除错误配置后会自动加载适配版本,支持mock所有非final类(示例中给类加open关键字的写法符合要求),不需要额外配置即可正常运行测试。

方案2:需要mock final类、静态方法(使用inline mock能力)

替换原有Mockito依赖,使用适配Android的inline mock实现,不需要手动添加任何MockMaker配置文件:

  1. 移除原有mockito-android依赖,避免类冲突
  2. 添加dexmaker提供的Android版inline mock依赖,版本和使用的Mockito主版本对齐即可:
def mockitoVersion = "3.10.0"
androidTestImplementation "com.linkedin.dexmaker:dexmaker-mockito-inline:$mockitoVersion"

该依赖内置了适配ART虚拟机的inline mock实现,不需要额外配置即可支持final类、静态方法的mock,不会触发Instrumentation API相关错误。

注意事项

  • 本地JVM单元测试(src/test目录下的测试)如果需要使用mockito-inline,对应的MockMaker配置文件必须放在src/test/resources路径下,不要放到androidTest的资源目录,否则会导致instrumentation测试运行时加载错误的MockMaker实现。
  • 提供的测试代码逻辑本身没有问题,mock生成的对象基本类型字段默认值为0,配置修复后断言可正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:12:43