Я пытаюсь выполнить модульное тестирование сопрограммы Kotlin, которая использует delay()
. Что касается модульного теста, меня не волнует delay()
, он просто замедляет тест. Я хотел бы провести тест таким образом, чтобы на самом деле не задерживалось при вызове delay()
.
Я попытался запустить сопрограмму, используя настраиваемый контекст, который делегирует CommonPool:
class TestUiContext : CoroutineDispatcher(), Delay {
suspend override fun delay(time: Long, unit: TimeUnit) {
// I'd like it to call this
}
override fun scheduleResumeAfterDelay(time: Long, unit: TimeUnit, continuation: CancellableContinuation<Unit>) {
// but instead it calls this
}
override fun dispatch(context: CoroutineContext, block: Runnable) {
CommonPool.dispatch(context, block)
}
}
Я надеялся, что смогу просто вернуться из метода delay()
моего контекста, но вместо этого он вызывает мой метод scheduleResumeAfterDelay()
, и я не знаю, как делегировать это планировщику по умолчанию.