kotlin mockk 测试要求延迟的时间长度

问题描述

我想测试一个 delay() 是否在协程中被调用了 x 天。而且我不确定以下测试是如何工作的...

@Test
fun 'wait 5 days'() {

    ...

    runBlocking {
        service.main(testEnv)
    }

    val slot = slot<Long>()
    coVerify(exactly = 1) { testEnv.timeoutProvider.sleep(capture(slot)) }
    assert(slot.captured == 5.days.inMilliseconds.toLong())
}

testEnv一个包含 timeoutProvider 的对象。服务使用此 timeoutProvider调用延迟。然后我想验证已调用的延迟是否为 5 天。为什么这个测试有效?

open class TimeOutProvider {

    suspend fun sleep(timeInSeconds: Long) {
        delay(timeInSeconds * 1000L)
    }
}

解决方法

This 视频帮助我了解发生了什么