kotlin 如何使用mockk来模拟对Spring存储库'saveAll()'方法的调用?

rsl1atfo  于 2022-12-30  发布在  Kotlin
关注(0)|答案(1)|浏览(160)

在测试Sping Boot Data存储库接口时,我使用Mockk作为模拟框架。
实际上我正在做以下事情

every { itemRepository.saveAll(listOf(any(), any())) } returns listOf<Item>(mockk())

它应该模拟以下行为

val loot: List<Item> = itemGenerator.generateLoot(lootTable)
itemRepository.saveAll(loot)

我收到的错误消息如下:

Failed matching mocking signature for
SignedCall(retValue=, isRetValueMock=true, retType=class kotlin.collections.Iterable, self=ItemRepository(#28), method=saveAll(Iterable), args=[[com.barbarus.gameserver.item.Item@ea00de, com.barbarus.gameserver.item.Item@23ca36d]], invocationStr=ItemRepository(#28).saveAll([com.barbarus.gameserver.item.Item@ea00de, com.barbarus.gameserver.item.Item@23ca36d]))
left matchers: [any(), any()]

错误消息显示left matchers: [any(), any()],指出我没有正确定义期望的参数。
我可以通过测试逻辑中的真实的实现来完全定义这些项,但是我想坚持使用mockk(),只是为了保持测试代码的精简和快速。
但是我不能在这里用listOf(any(),any())定义两个元素的List<Item>,我尝试了其他的Mockk API,没有任何运气。
你知道在这种情况下该用什么吗?

jhdbpxl9

jhdbpxl91#

在传入saveAll()时,应键入any()
例如:

import com.barbarus.gameserver.item.Item
...

every { itemRepository.saveAll(any<List<Item>>() } returns listOf<Item>(mockk())

Solution from another post

相关问题