Ir al contenido principal
Versión: 6.1

Extensiones del sistema

[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 →

Extensiones del sistema

Si necesitas probar código que utiliza java.lang.System, Kotest ofrece extensiones que pueden modificar el sistema y restaurarlo después de cada prueba. Esta extensión solo está disponible en JVM.

Para usar esta extensión, añade la dependencia a tu proyecto:

io.kotest:kotest-extensions:${version}
precaución

Esta extensión no admite ejecución concurrente de pruebas. Según las especificaciones de JVM, solo puede existir una instancia de estas extensiones en ejecución (por ejemplo: solo puede existir un mapa de entorno). Si intentas ejecutar más de una instancia simultáneamente, el resultado será indefinido.

Extensión de propiedades del sistema

Puedes sobrescribir las propiedades del sistema (System.getProperties()) usando un listener a nivel de spec o mediante la función withSystemProperty para envolver cualquier fragmento de código.

Con la función:

withSystemProperty("foo", "bar") {
System.getProperty("foo") shouldBe "bar"
}

Y como extensión:

class MyTest : FreeSpec() {
override val extensions = listOf(SystemPropertyTestListener("foo", "bar"))

init {
"MyTest" {
System.getProperty("foo") shouldBe "bar"
}
}
}

Listeners para bloquear stdout/stderr

Quizás quieras garantizar que no quedan mensajes de depuración residuales o asegurar que siempre usas un Logger para tus trazas.

Para ello, Kotest ofrece NoSystemOutListener y NoSystemErrListener. Estos listeners bloquean cualquier mensaje dirigido directamente a System.out o System.err, respectivamente:

// In Project or in Spec
override val extensions = listOf(NoSystemOutListener, NoSystemErrListener)

Listeners para Locale/Zona horaria

Algunos códigos utilizan o son sensibles al Locale y zona horaria predeterminados. En lugar de manipular estos valores manualmente, ¡deja que Kotest lo gestione por ti!

withDefaultLocale(Locale.FRANCE) {
println("My locale is now France! Très bien!")
}

withDefaultTimeZone(TimeZone.getTimeZone(ZoneId.of("America/Sao_Paulo"))) {
println("My timezone is now America/Sao_Paulo! Muito bem!")
}

Y como extensión:

// In Project or in Spec
override val extensions = listOf(
LocaleTestListener(Locale.FRANCE),
TimeZoneTestListener(TimeZone.getTimeZone(ZoneId.of("America/Sao_Paulo")))
)