Configuración a Nivel de Paquete
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Configuración a Nivel de Paquete
Esta página describe cómo usar la configuración a nivel de paquete para compartir configuraciones entre múltiples specs en el mismo paquete.
La configuración a nivel de paquete se introdujo en Kotest 6.0. Si estás usando una versión anterior, actualiza para aprovechar esta función.
La configuración a nivel de paquete es una característica exclusiva de JVM.
Introducción
Al escribir tests, a menudo necesitas aplicar la misma configuración a múltiples archivos de pruebas en el mismo paquete. En lugar de repetir la configuración para cada spec o establecerla a nivel global del proyecto, puedes usar la configuración a nivel de paquete para definir una configuración compartida que se aplique a todos los specs en un paquete específico y sus subpaquetes.
La configuración a nivel de paquete funciona creando una clase llamada PackageConfig que extienda AbstractPackageConfig en el paquete donde deseas aplicar la configuración.
Uso Básico
Para establecer una configuración predeterminada para todos los specs en un paquete, crea una clase llamada PackageConfig que extienda AbstractPackageConfig en el paquete objetivo:
// In package: com.example.mypackage
class PackageConfig : AbstractPackageConfig() {
override val timeout = 5.seconds
override val invocations = 2
override val failfast = true
}
Con esta configuración:
Todos los tests en specs dentro del paquete
com.example.mypackagetendrán un timeout de 5 segundosTodos los tests se ejecutarán dos veces (2 invocaciones)
Los tests usarán modo failfast
Esta configuración también se aplicará a todos los subpaquetes (ej. com.example.mypackage.subpackage).
Orden de Resolución de Configuraciones
Kotest usa el siguiente orden para resolver valores de configuración:
Configuración específica de la prueba (definida mediante
.config())Sobrescrituras a nivel de especificación (mediante variables en la clase spec)
Configuración predeterminada de la especificación (definida mediante
defaultTestConfig)Configuración a nivel de paquete (establecida vía
PackageConfig)Configuración del paquete padre (si existe)
Configuración global (establecida vía
ProjectConfig)Propiedades del sistema o variables de entorno
Esto significa que las configuraciones más específicas anularán las más generales. Por ejemplo, si estableces un timeout tanto a nivel de test como en una configuración de paquete, se usará el timeout a nivel de test.
Opciones de Configuración Disponibles
AbstractPackageConfig soporta las siguientes opciones de configuración:
isolationMode: Controla cómo se aíslan los tests entre síassertionMode: Controla el comportamiento de las asercionestestCaseOrder: Controla el orden de ejecución de los teststimeout: Tiempo máximo permitido para ejecutar un testinvocationTimeout: Tiempo máximo permitido para cada invocación individualfailfast: Activa el modo "fallo rápido" al primer errorretries: Número de reintentos para pruebas fallidascoroutineDebugProbes: Habilita el trazado mejorado de corrutinas cuando ocurre un errorcoroutineTestScope: Indica si se debe usar un ámbito de corrutinas para pruebasduplicateTestNameMode: Controla qué hacer al detectar nombres de tests duplicadosassertSoftly: Indica si se deben usar aserciones suaves para todas las pruebastestExecutionMode: Controla cómo se ejecutan los tests (secuencial o concurrentemente)extensions: Lista de extensiones aplicables a todos los tests del paquete
Ejemplos
Ejemplo: Configuración de tiempos de espera y reintentos
// In package: com.example.api.tests
class PackageConfig : AbstractPackageConfig() {
// All API tests might need longer timeouts and retries
override val timeout = 30.seconds
override val retries = 3
}
Ejemplo: Configuración del modo de ejecución de pruebas
// In package: com.example.unit.tests
class PackageConfig : AbstractPackageConfig() {
// Run all unit tests concurrently for faster execution
override val testExecutionMode = TestExecutionMode.Concurrent
}
Ejemplo: Adición de extensiones para un paquete
// In package: com.example.database.tests
class PackageConfig : AbstractPackageConfig() {
// Add a database container for all database tests
override val extensions = listOf(
ContainerExtension(PostgreSQLContainer<Nothing>().withDatabaseName("testdb"))
)
}
Jerarquía de paquetes
Cuando tienes configuraciones a nivel de paquete en diferentes niveles de tu jerarquía de paquetes, la configuración más cercana al paquete de la especificación tiene prioridad.
Por ejemplo, si tienes:
com.example.PackageConfig
com.example.api.PackageConfig
com.example.api.v1.PackageConfig
Y tu prueba está en com.example.api.v1.UserTest, entonces:
Se aplicará primero
com.example.api.v1.PackageConfigLos valores no configurados allí recurrirán a
com.example.api.PackageConfigLos valores no configurados en ninguno de los dos recurrirán a
com.example.PackageConfigFinalmente, los valores no configurados en ningún paquete recurrirán a la configuración del proyecto
Detalles de implementación
Kotest detecta automáticamente las clases llamadas PackageConfig que extienden AbstractPackageConfig en tiempo de ejecución. La detección
se produce cuando se ejecuta una prueba, y Kotest busca configuraciones de paquete en el paquete de la prueba y todos los paquetes
padre.
Por razones de rendimiento, las configuraciones de paquete se almacenan en caché después de su primera carga, por lo que los cambios en una clase de configuración de paquete solo surtirán efecto después de reiniciar la ejecución de pruebas.