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 coroutineTestScope en la configuración de la prueba:
class TestDispatcherTest : FunSpec() {
init {
test("foo").config(coroutineTestScope = 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(coroutineTestScope = 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 despachador de pruebas para todas las pruebas en una especificación configurando coroutineTestScope a true a nivel de la especificación:
class TestDispatcherTest : FunSpec() {
init {
coroutineTestScope = 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 coroutineTestScope = true
}