簡體   English   中英

如何使用 mockk 模擬對 Spring 存儲庫 `saveAll()` 方法的調用?

[英]How can I mock a call to Spring's repository `saveAll()` method using mockk?

在測試我的 Spring 引導數據存儲庫接口時,我使用Mockk作為我的 mocking 框架。

其實我在做以下事情

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()]指出我不知何故沒有定義預期的 arguments 權利。

我可以在我的測試邏輯中通過真實的實現來完全定義項目,但我想堅持使用mockk()只是為了保持測試代碼的簡潔和快速。

但是,我有點無法在此處使用listOf(any(),any())定義具有兩個元素的List<Item> 我嘗試了 Mockk 的其他 API,但沒有任何運氣。

知道在這種情況下使用什么嗎?

當您傳遞到saveAll() ) 時,您應該鍵入any() ) 。

例如:

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

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

另一個帖子的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM