给出
nginx
或
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
如何解决?
答案 0 :(得分:1)
这对我有用。 Hello
对象不需要被模拟,因为它是被测试的类。通过模拟,测试仅记录了blah()
的调用,而没有实际执行它们。
使用spyk
而不是mockk
可以构造MyCallback
类型,从而可以定义invoke()
函数。因此,也许这是解决问题的一种方法,而不是解释为什么ockock似乎不保留该类型信息。
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()) }
}
}