Configuración a nivel de proyecto
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Kotest es flexible y ofrece múltiples formas de configurar pruebas, como definir el orden de ejecución dentro de un spec o cómo se instancian las clases de prueba. En ocasiones, querrás establecer esto a nivel global mediante la configuración a nivel de proyecto.
La configuración a nivel de proyecto se implementa creando un objeto o clase que herede de AbstractProjectConfig.
Cualquier configuración establecida a nivel de Spec o directamente en una prueba anulará la configuración especificada a nivel de proyecto.
Entre las opciones disponibles en KotestProjectConfig destacan: paralelismo de pruebas, fallo de specs con tests ignorados,
AssertSoftly global, y listeners o extensiones reutilizables.
Detección en tiempo de ejecución
En tiempo de ejecución, Kotest escaneará clases que extiendan AbstractProjectConfig y las instanciará,
aplicando los valores de configuración definidos en ellas.
Puedes crear múltiples clases de configuración en distintos módulos. Todas las presentes en el classpath actual serán detectadas y sus configuraciones se fusionarán. Esto permite centralizar configuraciones comunes en módulos raíz. En conflictos, se elegirá un valor arbitrariamente, por lo que se desaconseja añadir configuraciones contradictorias.
En proyectos grandes, puedes desactivar el escaneo automático si genera costes de inicio significativos.
Para ello, define la propiedad del sistema o variable de entorno kotest.framework.classpath.scanning.config.disable como true.
Tras desactivar el escaneo automático, puedes especificar un nombre de clase conocido que Kotest instanciará reflectivamente.
Usa la propiedad del sistema o variable de entorno kotest.framework.config.fqn.
Por ejemplo, establecer:
kotest.framework.classpath.scanning.config.disable=true
kotest.framework.config.fqn=com.wibble.KotestConfig
Desactivará el escaneo en tiempo de ejecución y buscará la clase com.wibble.KotestConfig. Esta clase debe seguir
heredando de AbstractProjectConfig.
Paralelismo
Puedes configurar Kotest para ejecutar especificaciones en paralelo y aprovechar CPUs modernos con múltiples núcleos estableciendo el nivel de paralelismo (por defecto es 1). Las pruebas dentro de una especificación siempre se ejecutan secuencialmente.
Para ello, sobreescribe parallelism en tu configuración y asígnalo a un valor mayor que 1. Este número representa la cantidad de especificaciones que se ejecutan concurrentemente. Por ejemplo:
object KotestProjectConfig : AbstractProjectConfig() {
override val parallelism = 3
}
Un método alternativo es usar la propiedad de sistema kotest.framework.parallelism, que siempre tendrá prioridad sobre el valor configurado aquí si está definida.
Algunas pruebas pueden no comportarse correctamente en paralelo, por lo que puedes excluir especificaciones individuales y forzar su ejecución en aislamiento usando la anotación @DoNotParallelize.
Esta funcionalidad solo está disponible en el target JVM.
Modo de aserción
Puedes configurar Kotest para que falle la compilación o muestre advertencias en stderr si se ejecuta una prueba que no utiliza aserciones de Kotest.
Para esto, establece assertionMode a AssertionMode.Error o AssertionMode.Warn en tu configuración. Un método alternativo es usar la propiedad de sistema kotest.framework.assertion.mode, que siempre tendrá prioridad si está definida.
object KotestProjectConfig : AbstractProjectConfig() {
override val assertionMode = AssertionMode.Error
}
El modo de aserción solo funciona con aserciones de Kotest, no con otras librerías. Esto se debe a que las aserciones deben ser compatibles explícitamente con este modo cuando está activado.
Assert Softly Global
Assert Softly es muy útil para agrupar errores en un único fallo. Para activarlo automáticamente en cada prueba, puedes configurarlo aquí. Alternativamente, establece la propiedad de sistema kotest.framework.assertion.globalassertsoftly a true, que siempre tendrá prioridad si está definida.
object KotestProjectConfig : AbstractProjectConfig() {
override val globalAssertSoftly = true
}