我有一个简单的对象,该对象提供了一个暂停函数来模拟延迟的网络请求,然后从该对象中调用另一种方法。
class CoroutinesObject {
suspend fun doApiCall() {
delay(1000)
println("Hello from API")
val apiResult = "result #1"
callMe(apiResult)
}
fun callMe(result: String) {
println("[${Thread.currentThread().name}] call me with result: $result")
}
}
我想编写一个简单的测试,该测试应验证方法callMe
已被调用。
class CoroutinesTest {
@Test
fun doApiCall_callsCallMe() {
val obj = CoroutinesObject()
runBlocking {
obj.doApiCall()
}
coVerify { obj.callMe("result #1") }
}
}
不幸的是,测试失败并出现以下异常,我不确定为什么会发生这种情况。
io.mockk.MockKException: Missing calls inside verify { ... } block.
任何人都知道问题出在哪里,以及如何编写能够验证所调用方法的测试?
答案 0 :(得分:2)
好吧,好像是我的对象缺少了一个模拟对象就是问题所在。以下测试有效:
@Test
fun doApiCall_callsCallMe() {
val obj = spyk(CoroutinesObject())
runBlocking {
obj.doApiCall()
}
coVerify { obj.callMe(any()) }
}