Ir al contenido principal
Versión: 5.4.x

Semillas en Pruebas de Propiedades

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

Cuando se ejecuta una prueba de propiedad, los valores se generan usando una fuente aleatoria creada a partir de una semilla. Por defecto, esta semilla se elige aleatoriamente (usando la instancia por defecto de kotlin.random.Random). Sin embargo, existen casos donde este valor necesita fijarse o repetirse.

Puedes modificar el valor predeterminado para todas las pruebas (a menos que se sobrescriba mediante las opciones mencionadas abajo) cambiando el valor de configuración PropertyTesting.defaultSeed.

Especificación manual de la semilla

Para establecer manualmente la semilla, pasa una instancia de PropTestConfig a tus métodos de prueba de propiedad. Esto es útil cuando descubres un fallo en una prueba y quieres asegurar que esos valores sigan ejecutándose en el futuro como prueba de regresión.

Por ejemplo:

class PropertyExample : StringSpec({
"String size" {
forAll<String, String>(PropTestConfig(seed = 127305235)) { a, b ->
(a + b).length == a.length + b.length
}
}
})
consejo

Cuando falle una prueba de propiedades, Kotest mostrará la semilla utilizada. Puedes duplicar la prueba configurándola para usar esta semilla, creando así una prueba de regresión permanente para esos valores.

Reejecución de semillas fallidas

Por defecto, cuando una prueba de propiedad falla, la semilla utilizada se escribe en un archivo en ~/.kotest/seeds/<spec>/<testname>. Si este archivo existe en ejecuciones posteriores, la semilla se usará en lugar de una aleatoria. Tras una ejecución exitosa, el archivo se eliminará.

nota

Una semilla especificada manualmente siempre tiene prioridad sobre una semilla de fallo guardada.

consejo

Esta característica puede desactivarse configurando PropertyTesting.writeFailedSeed = false

Fallar cuando hay semillas configuradas

Algunos usuarios prefieren evitar especificar semillas manualmente. Quieren usarlas solo localmente durante el desarrollo, sin incluirlas en el repositorio. Si sigues este enfoque, configura PropertyTesting.failOnSeed = false o la variable de entorno kotest.proptest.seed.fail-if-set en false en tu servidor.

Si entonces se detecta una semilla, el conjunto de pruebas fallará.