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

MockK模拟返回List类型方法时抛出IncompatibleClassChangeError异常

解决MockK模拟Student类时getMarks()方法抛出IncompatibleClassChangeError的问题

问题原因

这个错误是因为MockK生成代理类时,错误地尝试让List_1_Proxy继承List接口(Java不允许类继承接口,代理类应实现接口而非继承),通常出现在Android环境下DX编译器兼容问题或MockK版本缺陷场景中。

解决方案

方案1:使用MockK专属的returnsList方法

MockK针对列表类型提供了专门的返回方法,可规避接口代理生成的问题:

@Test
fun test1(){
   val student = mockk<Student>()
    every { student.getMarks() }.returnsList(listOf("9","5"))
    student.getMarks()
}

方案2:返回具体的List实现类

直接返回ArrayList这类具体实现类,替代listOf()生成的不可变列表(避免MockK类型推断异常):

@Test
fun test1(){
   val student = mockk<Student>()
    every { student.getMarks() }.returns(arrayListOf("9","5"))
    student.getMarks()
}

方案3:升级MockK版本

旧版本MockK存在这类代理生成bug,升级到最新稳定版可解决问题。例如在Gradle中更新依赖:

testImplementation "io.mockk:mockk:1.13.8" // 替换为当前最新稳定版本

方案4:启用放松模拟(Relaxed Mock)

若无需严格验证所有调用,可使用放松模拟模式,绕过部分类型代理问题:

@Test
fun test1(){
   val student = mockk<Student>(relaxed = true)
    every { student.getMarks() }.returns(listOf("9","5"))
    student.getMarks()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:39:58