Mockk: проверка метода, вызываемого в сопрограмме - PullRequest
0 голосов
/ 23 января 2020

У меня есть простой объект, который предоставляет функцию приостановки для имитации задерживающего сетевого запроса и затем вызывает другой метод из объекта.

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.

У кого-нибудь есть идеи, в чем проблема и как написать тест, который может проверить вызываемый метод?

1 Ответ

1 голос
/ 23 января 2020

Ладно, похоже, что проблема была в отсутствии макета моего объекта. Работает следующий тест:

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

    coVerify { obj.callMe(any()) }
}
...