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

如何用Mockk模拟Spring Data Repository的saveAll()方法?

解决Mockk模拟Spring Data saveAll时的参数匹配问题

你之前的写法错误在于把any()直接放在listOf()里——Mockk的参数匹配器不能这么嵌套使用,listOf()是普通Kotlin函数,Mockk无法识别这种方式定义的匹配规则,所以会报签名匹配失败。

要实现匹配包含2个任意Item元素的List且不创建真实实例,用Mockk的match匹配器或者内置的集合匹配器就能搞定,两种写法如下:

写法1:自定义匹配逻辑

用match直接断言List的大小和元素类型:

every {
    itemRepository.saveAll(match { list: List<Item> ->
        list.size == 2 && list.all { it is Item }
    })
} returns listOf(mockk<Item>(), mockk<Item>())

写法2:用Mockk内置集合匹配器

结合hasSize和all匹配器,代码更简洁:

import io.mockk.every
import io.mockk.mockk
import io.mockk.matchers.hasSize
import io.mockk.matchers.all

every {
    itemRepository.saveAll(hasSize<List<Item>>(2) and all { isInstanceOf<Item>() })
} returns listOf(mockk(), mockk())

两种写法都能精准匹配业务代码中传入的含2个Item的List,同时返回模拟的Item对象,完全不需要创建真实的Item实例,既精简测试代码又提升运行速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:35:38