Kotlin模拟:无法正确模拟列表

gorkyyrv  于 2023-02-05  发布在  Kotlin
关注(0)|答案(1)|浏览(146)

我试图验证是否调用了列表上的.shuffled(),但是由于列表上先前的.take(6)调用,所以在运行时出现错误,并且我找不到解决此问题的方法。
下面是一些得到相同错误的代码:

val mockList =
    mockk<List<String>> { every { shuffled() } returns mockk(relaxed = true) }
val choiceList = spyk(listOf("String1", "String2")) { every { take(6) } returns mockList }

val tmp = choiceList.take(6)
val tmp2 = tmp.shuffled()

verify {mockList.shuffled())

在第4行,我得到了以下错误:

class io.mockk.renamed.java.util.List$Subclass0 cannot be cast to class java.lang.Integer (io.mockk.renamed.java.util.List$Subclass0 is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap')

尝试直接在choiceList.take(6).shuffled()上验证并将两个tmp值合并为一个值的方法没有成功,因为无论.shuffled()是否被调用,它都将为真。此外,从间谍切换到choiceList的模拟也不起作用。
编辑:注意,由于这是一个玩具示例,因此take()是完全必要的,不能删除,因为它在实际代码中有真实的用途。

qjp7pelc

qjp7pelc1#

val mockList: List<String> = mockk(relaxed = true)
    mockList.shuffled()
    verify { mockList.shuffled() }

这对我很有效。问题是choiceListtake不能被嘲笑。真的有必要吗?

相关问题