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

如何使用Mockito模拟方法?抽象类继承方法模拟失败排查

问题分析与解决方案

你遇到的问题核心原因是 Kotlin默认所有方法都是final的,而Mockito的常规版本无法mock或spy final方法,所以你预设的返回值根本不会生效,调用spy.hello()还是会执行原方法的逻辑(另外你的原抽象类hello()方法还有个小问题:缺少return关键字,这会导致编译错误,得补上)。

下面是具体的解决办法:

方法一:将抽象类的方法改为open

在Kotlin中,只有open修饰的方法才能被重写或Mockito处理。修改你的抽象类代码:

abstract class AbstractMyClass {
    open fun hello(): String { return "bello" } // 加上open和return关键字
}

修改后,Mockito就能正常拦截这个方法并返回你预设的"cello"了,你的测试代码不需要改动。

方法二:使用Mockito Inline插件

如果你不想修改原有代码的修饰符,可以引入Mockito的inline插件,它支持mock final类和方法。在你的构建文件中添加依赖:

如果是Gradle(Kotlin DSL):

testImplementation("org.mockito:mockito-inline:5.6.0") // 可替换为最新稳定版本

如果是Gradle(Groovy):

testImplementation 'org.mockito:mockito-inline:5.6.0'

添加依赖后,不需要修改抽象类的方法,你的原有测试代码就能正常工作。

额外注意点

你原抽象类中的hello()方法存在语法错误:fun hello(): String { "bello" } 缺少return关键字,这会导致编译失败,无论用哪种方案都需要补上return才能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:02:41