Ir al contenido principal
Versión: 6.2 🚧

Pruebas basadas en 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 →

Kotest está dividido en varios submódulos que pueden usarse de forma independiente. Uno de estos submódulos es el framework de pruebas basadas en propiedades. No necesitas usar Kotest como tu framework de pruebas principal (¡aunque deberías!) para beneficiarte de su soporte para pruebas basadas en propiedades.

version badge version badge

¿Qué son las pruebas basadas en propiedades?

Los desarrolladores normalmente escriben pruebas basadas en ejemplos. Son esas pruebas unitarias clásicas que conoces y amas. Proporcionas algunas entradas y resultados esperados, y un framework de pruebas como Kotest o JUnit verifica que los resultados reales cumplan con las expectativas.

Un problema de este enfoque es que es fácil pasar por alto errores debido a casos límite que el desarrollador no consideró, o por falta de cobertura en las entradas seleccionadas. En cambio, con las pruebas basadas en propiedades, cientos o miles de valores se introducen en la misma prueba, y los valores son (normalmente) generados aleatoriamente por tu framework de pruebas basadas en propiedades.

Por ejemplo, un buen framework de pruebas basadas en propiedades incluirá valores como infinito negativo, listas vacías, cadenas con caracteres no ASCII, etc. Cosas que frecuentemente olvidamos al escribir pruebas basadas en ejemplos.

Las pruebas basadas en propiedades se concibieron originalmente en frameworks como Quickcheck con la idea de probar una propiedad en algún objeto, es decir, algo que debe cumplirse para todas las entradas. Un invariante, en otras palabras. Un ejemplo de invariante es: dadas dos cadenas a y b, entonces length(a + b) siempre debe ser igual a length(a) + length(b).

De ahí proviene el término pruebas basadas en propiedades.

Sin embargo, no tienes que usar pruebas basadas en propiedades solo para probar cosas como leyes de mónadas o funciones numéricas básicas. Cualquier prueba que se beneficie de una amplia variedad de valores de entrada es un buen candidato. Por ejemplo, podríamos tener una función que valida nombres de usuario, y queremos probar que los correos válidos sean aceptados. Una prueba basada en propiedades sería útil aquí para generar miles de combinaciones que ayuden a robustecer nuestra lógica de validación.

Primeros pasos

El framework de pruebas basadas en propiedades está soportado en todas las plataformas.

Add the following dependency to your build:

dependencies {
testImplementation("io.kotest:kotest-property:$version")
}

Pasos siguientes

Para crear valores de entrada para las pruebas, Kotest utiliza el término generator. Un generador por argumento de entrada se pasa a una función de prueba, y la prueba se ejecutará durante un número determinado de iteraciones.

Más información sobre: