给定
typealias MyCallback = (s: String) -> Unit
object Hello {
fun main() {
blah { print(it) }
}
fun blah(cb: MyCallback) {
cb.invoke("hi")
}
}
或
interface MyCallback {
fun invoke (s: String) {}
}
object Hello {
fun main() {
blah(object : MyCallback {
override fun invoke(s: String) {
print(s)
}
})
}
fun blah(cb: MyCallback) {
cb.invoke("hi")
}
}
对于两者,我在执行时都会收到上述错误(Verification failed: call 1 of 1: MyCallback(#2).invoke(any())) was not called
(
@Test
fun testInvoke() {
val mock = mockk<Hello>(relaxed = true)
val cb = mockk<MyCallback>()
mock.blah(cb)
verify { cb.invoke(any()) }
}
如何解决?
这对
我有用。Hello
对象不需要模拟,因为它是要测试的类。通过模拟它,测试只是记录blah()
的调用,而不是实际执行它们。
使用 spyk
而不是 mockk
允许构造 MyCallback
类型,从而定义invoke()
函数。因此,也许这更像是一种解决方法,而不是解释为什么 mockk 似乎没有保留该类型信息。
typealias MyCallback = (s: String) -> Unit
object Hello {
fun main() {
blah { print(it) }
}
fun blah(cb: MyCallback) {
cb.invoke("hi")
}
}
class MockKTest {
@Test
fun testInvoke() {
val mock = spyk<Hello>()
val cb = mockk<MyCallback>(relaxed = true)
mock.blah(cb) // or just do Hello.blah(cb)
verify { cb.invoke(any()) }
}
}