Это сработало для меня. Объект 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()) }
}
}