Próbuję przeprowadzić test jednostkowy corntine Kotlina, który używa delay()
. Dla testu jednostkowego nie interesuje mnie delay()
, to tylko spowalnia test. Chciałbym uruchomić test w pewien sposób, który nie opóźnia się automatycznie, gdy wywoływany jest delay()
.Jednostka testująca coroutine Kotlin z opóźnieniem
Próbowałem uruchomiony współprogram użyciu kontekstu niestandardową, która deleguje do 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)
}
}
Miałem nadzieję, że właśnie wraca z delay()
sposobu mojego kontekstu, ale zamiast tego dzwoni moja metoda scheduleResumeAfterDelay()
i I don” t wiedzieć, jak przekazać to do domyślnego harmonogramu.
Nie możesz po prostu ustawić limitu czasu opóźnienia, aby w teście można było wybrać bardzo mały ?! – s1m0nw1
@ s1m0nw1 Tak, ale wolałbym ogólne rozwiązanie i nie musiałbym modyfikować mojego kodu w ten sposób. –
@eoinmullan, Czy możesz podzielić się minimalnym projektem git dla tego samego? –