Semillas en Pruebas de Propiedades
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
}
}
})
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á.
Una semilla especificada manualmente siempre tiene prioridad sobre una semilla de fallo guardada.
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á.