Ir al contenido principal
Versión: 6.2 🚧

Configuración Compartida de Pruebas

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

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.

nota

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 fallida

  • invocationTimeout: Tiempo máximo permitido para cada invocación individual

  • invocations: Número de veces que se ejecuta cada prueba

  • assertSoftly: Indica si se deben usar aserciones suaves para todas las pruebas

  • tags: Conjunto de etiquetas aplicadas a todas las pruebas

  • severity: Nivel de severidad para todas las pruebas

  • enabledIf: Función que determina si las pruebas deben habilitarse

  • enabledOrReasonIf: Función que determina si las pruebas deben habilitarse y proporciona una razón en caso contrario

  • assertionMode: Modo de aserción para todas las pruebas

  • testOrder: Orden de ejecución de las pruebas

  • blockingTest: Indica si las pruebas deben ejecutarse de forma bloqueante

  • coroutineTestScope: Indica si se debe usar un ámbito de corrutinas para pruebas

  • coroutineDebugProbes: Habilita las sondas de depuración para corrutinas

  • duplicateTestNameMode: Manejo de nombres de prueba duplicados

  • failfast: Activa el modo "fallo rápido" al primer error

  • retries: Número de reintentos para pruebas fallidas

  • retryDelay: 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 : FreeSpec() {
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:

  1. Configuración específica de la prueba (definida mediante .config())

  2. Sobrescrituras a nivel de especificación (mediante variables en la clase spec)

  3. Configuración predeterminada de la especificación (definida mediante defaultTestConfig)

  4. Configuración predeterminada a nivel de paquete (definida mediante PackageConfig)

  5. Configuración global (definida mediante ProjectConfig)

  6. Propiedades del sistema o variables de entorno