Configuración Compartida de Pruebas
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Configuración Compartida de Pruebas
Esta página explica cómo usar DefaultTestConfig para compartir configuraciones de prueba entre múltiples casos de prueba en tus especificaciones.
Esta funcionalidad está disponible en Kotest 6.0 y versiones posteriores.
Introducción
Al escribir pruebas, a menudo necesitas aplicar la misma configuración a múltiples archivos de pruebas.
En lugar de repetir la configuración para cada prueba, puedes usar DefaultTestConfig para definir
una configuración compartida que se aplicará a todas las pruebas en una especificación.
DefaultTestConfig es una clase de datos que permite compartir fácilmente la configuración de casos de prueba.
Cada valor de configuración puede sobrescribirse por prueba individual, pero si deseas tener un conjunto común de valores predeterminados compartidos entre varias pruebas, puedes crear una instancia de esta clase y declararla en cada especificación donde quieras compartir la configuración.
Uso Básico
Para establecer una configuración predeterminada para todas las pruebas en una especificación, asigna una instancia de DefaultTestConfig
a la propiedad defaultTestConfig en tu especificación:
class MySpec : FunSpec() {
init {
defaultTestConfig = DefaultTestConfig(
timeout = 2.seconds,
invocations = 3,
threads = 2
)
// All tests in this spec will use the above configuration by default
test("test with default config") {
// This test will run 3 times with a timeout of 2 seconds
}
// You can still override the default config for specific tests
test("test with custom config").config(timeout = 5.seconds) {
// This test will run 3 times (from default config) with a timeout of 5 seconds
}
}
}
Opciones de Configuración Disponibles
DefaultTestConfig soporta las siguientes opciones de configuración:
timeout: Tiempo máximo permitido para ejecutar una prueba antes de considerarse fallidainvocationTimeout: Tiempo máximo permitido para cada invocación individualinvocations: Número de veces que se ejecuta cada pruebaassertSoftly: Indica si se deben usar aserciones suaves para todas las pruebastags: Conjunto de etiquetas aplicadas a todas las pruebasseverity: Nivel de severidad para todas las pruebasenabledIf: Función que determina si las pruebas deben habilitarseenabledOrReasonIf: Función que determina si las pruebas deben habilitarse y proporciona una razón en caso contrarioassertionMode: Modo de aserción para todas las pruebastestOrder: Orden de ejecución de las pruebasblockingTest: Indica si las pruebas deben ejecutarse de forma bloqueantecoroutineTestScope: Indica si se debe usar un ámbito de corrutinas para pruebascoroutineDebugProbes: Habilita las sondas de depuración para corrutinasduplicateTestNameMode: Manejo de nombres de prueba duplicadosfailfast: Activa el modo "fallo rápido" al primer errorretries: Número de reintentos para pruebas fallidasretryDelay: Retardo entre reintentos
Ejemplos
Ejemplo: Configuración de Reintentos
class RetrySpec : DescribeSpec() {
init {
defaultTestConfig = DefaultTestConfig(retries = 5, retryDelay = 20.milliseconds)
describe("a flaky test") {
// This test will be retried up to 5 times with a 20ms delay between retries
it("should eventually pass") {
// Test logic here
}
}
}
}
Ejemplo: Configuración de Timeouts e Invocaciones
class PerformanceSpec : StringSpec() {
init {
defaultTestConfig = DefaultTestConfig(
timeout = 1.minutes,
invocations = 10,
invocationTimeout = 5.seconds
)
"performance test" {
// This test will run 10 times, with each invocation having a 5 second timeout
// The entire test has a 1 minute timeout
}
}
}
Ejemplo: Uso de Etiquetas y Modo de Aserción
class IntegrationSpec : FunSpec() {
init {
defaultTestConfig = DefaultTestConfig(
tags = setOf(Tags.Integration, Tags.Slow),
assertionMode = AssertionMode.Error
)
test("database connection") {
// This test will be tagged as Integration and Slow
// Assertions will throw errors instead of exceptions
}
}
}
Sobrescribir Configuración Predeterminada
Pruebas individuales pueden sobrescribir cualquier parte de la configuración predeterminada usando el método .config():
class MixedSpec : FunSpec() {
init {
defaultTestConfig = DefaultTestConfig(
timeout = 10.seconds,
invocations = 3
)
test("uses default config") {
// Uses timeout = 10.seconds and invocations = 3
}
test("overrides timeout only").config(timeout = 30.seconds) {
// Uses timeout = 30.seconds and invocations = 3 (from default)
}
test("overrides everything").config(timeout = 5.seconds, invocations = 1) {
// Uses timeout = 5.seconds and invocations = 1
}
}
}
El orden de prioridad es el siguiente:
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 predeterminada a nivel de paquete (definida mediante
PackageConfig)Configuración global (definida mediante
ProjectConfig)Propiedades del sistema o variables de entorno