使用 MockK 捕获 vararg 参数?

Cri*_*tan 6 kotlin mockk

您可以在 MockK 中模拟vararg 方法:

interface ClsWithManyMany {
    fun manyMany(vararg x: Any): Int
}

val obj = mockk<ClsWithManyMany>()
every { obj.manyMany(*anyVararg()) } returns 2
println(obj.manyMany("testing", "testing")) // 2
Run Code Online (Sandbox Code Playgroud)

如何捕获传递给该方法的值?这不起作用(捕获 a 也不起作用mutableListOf<Array<Any>>()):

val captured = slot<Array<Any>>()
every { obj.manyMany(*capture(captured)) } answers {
    println ("arguments: ${captured.captured}")
    2
}
Run Code Online (Sandbox Code Playgroud)

Cri*_*tan 11

您可以执行以下操作:

val captured = mutableListOf<Any?>()
every { obj.manyMany(*varargAllNullable { captured.add(it) }) } answers {
    println ("arguments: $captured")
    captured.clear()
    2
}
Run Code Online (Sandbox Code Playgroud)

这个问题是开放的,以便以一种不那么麻烦的方式来做到这一点。