Planificador de Corrutinas de Prueba
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Un TestDispatcher es un CoroutineDispatcher especial proporcionado por el módulo kotlinx-coroutines-test que permite a los desarrolladores controlar su reloj virtual y omitir retardos.
Un TestDispatcher soporta las siguientes operaciones:
-
currentTimeobtiene el tiempo virtual actual. -
runCurrent()ejecuta las tareas programadas en este punto del tiempo virtual. -
advanceUntilIdle()ejecuta todas las tareas en cola hasta que no queden más. -
advanceTimeBy(timeDelta)ejecuta las tareas en cola hasta que el tiempo virtual avance en timeDelta.
Para usar un TestDispatcher en una prueba, puedes activar testCoroutineDispatcher en la configuración de test:
class TestDispatcherTest : FunSpec() {
init {
test("foo").config(testCoroutineDispatcher = true) {
// this test will run with a test dispatcher
}
}
}
Dentro de esta prueba, puedes obtener un manejador del planificador mediante la propiedad de extensión testCoroutineScheduler. Usando este planificador, puedes manipular el tiempo:
import io.kotest.core.test.testCoroutineScheduler
class TestDispatcherTest : FunSpec() {
init {
test("advance time").config(testCoroutineDispatcher = true) {
val duration = 1.days
// launch a coroutine that would normally sleep for 1 day
launch {
delay(duration.inWholeMilliseconds)
}
// move the clock on and the delay in the above coroutine will finish immediately.
testCoroutineScheduler.advanceTimeBy(duration.inWholeMilliseconds)
val currentTime = testCoroutineScheduler.currentTime
}
}
}
Puedes activar un planificador de pruebas para todos los tests en una especificación estableciendo testCoroutineDispatcher a true a nivel de spec:
class TestDispatcherTest : FunSpec() {
init {
testCoroutineDispatcher = true
test("this test uses a test dispatcher") {
}
test("and so does this test!") {
}
}
}
Finalmente, puedes activar planificadores de pruebas para todos los tests en un módulo usando ProjectConfig:
class ProjectConfig : AbstractProjectConfig() {
override var testCoroutineDispatcher = true
}