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

如何用MockK指定同一方法在调用另一方法前后的不同行为?

解决MockK中按调用顺序指定方法返回值的问题

针对你需要让getStuff()在deleteStuff()前后返回不同结果的需求,MockK提供了几种直接的实现方式,以下是具体方案:

方案1:用returnsMany直接指定多轮返回值

如果明确知道getStuff()会被调用两次,且每次返回值固定,可以直接用returnsMany传入结果列表:

// 第一次调用返回创建的Stuff实例,第二次返回null(对应删除后的状态)
coEvery { myService.getStuff() } returnsMany listOf(Stuff, null)

方案2:用andThen链式指定后续返回

这种写法更直观,适合按顺序定义每一次调用的返回:

coEvery { myService.getStuff() } returns Stuff andThen null

方案3:用answers自定义动态逻辑

如果需要更复杂的判断(比如根据调用次数、外部状态动态返回),可以用answers结合计数器实现:

var getStuffInvocationCount = 0
coEvery { myService.getStuff() } answers {
    getStuffInvocationCount++
    // 第一次调用返回Stuff,后续调用返回null
    if (getStuffInvocationCount == 1) Stuff else null
}

以上三种方案都能适配你的测试流程:createStuff→getStuff(返回创建的实例)→deleteStuff→getStuff(返回空/删除后的状态),根据你的实际业务场景选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:05