Características y Cambios en Kotest 6.0
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Esta página enumera las características y cambios introducidos en Kotest 6.0.
Nuevas Características
Mejoras en Soporte de Concurrencia
Kotest 6.0 introduce un conjunto completo de funciones de concurrencia para mejorar la ejecución de pruebas:
Modo de Concurrencia de Specs: Controla cómo se ejecutan los specs (clases de prueba) entre sí
- Secuencial (predeterminado): Todos los specs se ejecutan secuencialmente
- Concurrente: Todos los specs se ejecutan concurrentemente
- LimitedConcurrency(max: Int): Los specs se ejecutan concurrentemente hasta un número máximo dado
Modo de Concurrencia de Tests: Controla cómo se ejecutan los tests raíz dentro de un spec entre sí
- Secuencial (predeterminado): Todos los tests se ejecutan secuencialmente
- Concurrente: Todos los tests se ejecutan concurrentemente
- LimitedConcurrency(max: Int): Los tests se ejecutan concurrentemente hasta un número máximo dado
Fábrica de Coroutine Dispatcher: Personaliza el dispatcher de corrutinas usado para ejecutar specs y tests
- Implementación incorporada: ThreadPerSpecCoroutineContextFactory
- Configurable a nivel de proyecto o de spec
Modo de Pruebas Bloqueantes: Resuelve problemas con timeouts al trabajar con código bloqueante
- Cambia la ejecución a un hilo dedicado para el caso de prueba
- Permite al motor de pruebas interrumpir tests de forma segura cuando exceden el tiempo
Configuración a Nivel de Paquete
La configuración a nivel de paquete permite definir configuraciones compartidas que aplican a todos los specs en un paquete específico y sus subpaquetes:
Crea una clase
PackageConfigque extiendaAbstractPackageConfigen el paquete objetivoLa resolución de configuración sigue una jerarquía clara (test específico → nivel spec → nivel paquete → paquete padre → global)
Soporta varias opciones de configuración (modo de aislamiento, modo de aserción, timeouts, etc.)
Configuración Compartida de Tests
La nueva función DefaultTestConfig permite definir configuraciones de prueba compartidas que aplican a todos los tests en un spec:
Establece valores predeterminados como timeout, invocaciones, etiquetas, etc.
Los tests individuales pueden sobrescribir cualquier parte de la configuración predeterminada
Simplifica la gestión de configuración para tests con requisitos similares
Nuevo Modo de Aislamiento: InstancePerRoot
Se ha introducido un nuevo modo de aislamiento InstancePerRoot:
Crea una nueva instancia de la clase Spec para cada test raíz (nivel superior)
Cada test raíz se ejecuta en su instancia asociada
Proporciona mejor aislamiento manteniendo una estructura limpia
Implementación de TestClock
Se ha añadido una nueva implementación TestClock para controlar el tiempo en pruebas:
Reloj mutable con precisión de milisegundos
Permite establecer instantes específicos y manipular el tiempo con operaciones de suma y resta
Útil para probar código dependiente del tiempo de forma determinista
Mejoras en Depuración de Corrutinas
Soporte mejorado para depurar corrutinas en pruebas:
CoroutineDebugProbeInterceptor para instalar el probe de depuración kotlinx para corrutinas
Facilita la depuración proporcionando stack traces y volcados de información de corrutinas
Se puede habilitar por test individual
Extensión Decoroutinator
Nueva extensión para mejorar los stack traces de corrutinas:
Se integra con Stacktrace Decoroutinator
Elimina detalles internos de implementación de corrutinas de los stack traces
Hace los stack traces más limpios y comprensibles
Ayuda a identificar rápidamente el origen de errores en pruebas basadas en corrutinas
Soporte para Power Assert
Kotest 6.0 se integra con la función Power Assert de Kotlin 2.2 para ofrecer mensajes de error mejorados en aserciones:
Muestra los valores de cada parte de una expresión cuando falla una aserción
Facilita la depuración de fallos en pruebas mostrando los valores reales en la expresión
Funciona con
shouldBey otras funciones de aserción configurablesConsulta la documentación de Power Assert para detalles e instrucciones de configuración
Cambios importantes
Versiones mínimas
Kotest 6.0 requiere como mínimo JDK 11 y Kotlin 2.2.
Soporte para Kotlin Multiplataforma
El soporte KMP en Kotest 6.0 ha cambiado respecto a versiones anteriores:
Ya no requiere un plugin del compilador
Proceso de configuración simplificado para proyectos multiplataforma
Consulta la documentación de configuración para detalles
Publicación de extensiones
Todas las extensiones se publican ahora bajo el grupo io.kotest:
Ritmo de versiones vinculado a los lanzamientos principales de Kotest
Simplifica la gestión de dependencias
Afecta a todos los módulos de extensión (Allure, Koin, Ktor, MockServer, WireMock, Spring, etc.)
Ubicación de la configuración del proyecto
La ubicación de la instancia de configuración del proyecto ahora debe estar en una ruta específica:
Por defecto estará en
io.kotest.provided.ProjectConfigSe puede sobrescribir configurando la propiedad de sistema
kotest.framework.config.fqnNo será detectada por el framework si está en otro lugar
Diferente al comportamiento de Kotest 5.x
Eliminado el escaneo de classpath
El escaneo de classpath para extensiones se ha eliminado en Kotest 6.0:
La anotación
@AutoScanya no es compatibleLas extensiones ahora deben registrarse explícitamente
Para registrar extensiones, utiliza uno de estos enfoques:
Añade extensiones a la configuración de tu proyecto:
object ProjectConfig : AbstractProjectConfig() {
override val extensions = listOf(
MyExtension(),
AnotherExtension()
)
}Usa la anotación
@ApplyExtensionen tus clases de especificaciones:@ApplyExtension(MyExtension::class)
class MySpec : FunSpec() {
// tests here
}
Pruebas Basadas en Datos (Data Driven Testing)
Si usas la funcionalidad withData de Kotest 5.0+, ya no necesitas añadir la dependencia kotest-framework-data
a tu proyecto, ya que se ha integrado en el framework principal.
Pruebas Basadas en Tablas (Table Driven Testing)
Si usas pruebas basadas en tablas de la era Kotest 4.x, deberás añadir la dependencia kotest-assertions-table
a tu proyecto, ya que se ha extraído del framework principal.
Sobrescritura de Extensiones
Dentro de la configuración del proyecto, las extensiones ahora son un val en lugar de una función. Si antes tenías:
override fun listeners() = ...
o
override fun extensions() = ...
Cambia esto por:
override val extensions = ...
Oyentes eliminados
Las extensiones de sobrescritura System.exit y System.env se han eliminado debido a la depreciación de SecurityManager en Java.
Modos de aislamiento obsoletos
Los siguientes modos de aislamiento están ahora obsoletos debido a comportamientos indefinidos en casos límite:
InstancePerTestInstancePerLeaf
Se recomienda usar InstancePerRoot en su lugar.
Cambios en la API
Se eliminó
io.kotest.assertions.print.Print<A>.print(A, level)en favor deprint(A), que ya no está marcada como obsoleta.Se renombró
io.kotest.matchers.maps.containaio.kotest.matchers.maps.mapcontain.Se ha movido el código de
io.kotest:kotest-assertions-apiaio.kotest:kotest-assertions-shared, y el artefactoio.kotest:kotest-assertions-apiya no se publica.io.kotest.matchers.Matcherio.kotest.matchers.MatcherResultio.kotest.matchers.andio.kotest.matchers.or- y algunos más
Mejoras
Sondas de depuración para corrutinas
Soporte mejorado para depuración de corrutinas:
Opción para habilitar sondas de depuración para mayor visibilidad en la ejecución de corrutinas
Ayuda a identificar problemas con corrutinas en pruebas
Proporciona trazas de pila detalladas y volcados de corrutinas cuando ocurren errores