Ir al contenido principal
Versión: 6.1

Planificador de Corrutinas de Prueba

[Traducción Beta No Oficial]

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:

  • currentTime obtiene 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
}