Extensiones del sistema
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}
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")))
)