【问题标题】:Mockk: Verify method called within coroutineMockk:验证协程中调用的方法
【发布时间】:2020-01-23 10:22:39
【问题描述】:

我有一个简单的对象,它提供了一个挂起函数来模拟延迟的网络请求,然后从该对象调用另一个方法。

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.

有人知道问题出在哪里以及如何编写能够验证被调用方法的测试吗?

【问题讨论】:

    标签: testing kotlin coroutine mockk


    【解决方案1】:

    好吧,好像我的对象缺少模拟是问题所在。以下测试有效:

    @Test
    fun doApiCall_callsCallMe() {
        val obj = spyk(CoroutinesObject())
        runBlocking {
            obj.doApiCall()
        }
    
        coVerify { obj.callMe(any()) }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2020-08-15
      • 2021-08-28
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多