Ir al contenido principal
Versión: 6.2 🚧

Características y Cambios en Kotest 6.0

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

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 PackageConfig que extienda AbstractPackageConfig en el paquete objetivo

  • La 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 shouldBe y otras funciones de aserción configurables

  • Consulta 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.ProjectConfig

  • Se puede sobrescribir configurando la propiedad de sistema kotest.framework.config.fqn

  • No 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 @AutoScan ya no es compatible

  • Las 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 @ApplyExtension en 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:

  • InstancePerTest

  • InstancePerLeaf

Se recomienda usar InstancePerRoot en su lugar.

Cambios en la API

  • Se eliminó io.kotest.assertions.print.Print<A>.print(A, level) en favor de print(A), que ya no está marcada como obsoleta.

  • Se renombró io.kotest.matchers.maps.contain a io.kotest.matchers.maps.mapcontain.

  • Se ha movido el código de io.kotest:kotest-assertions-api a io.kotest:kotest-assertions-shared, y el artefacto io.kotest:kotest-assertions-api ya no se publica.

    • io.kotest.matchers.Matcher
    • io.kotest.matchers.MatcherResult
    • io.kotest.matchers.and
    • io.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