Pruebas de Mutación
La prueba de mutación consiste en hacer cambios a un programa, ya sea manual o automáticamente, para identificar cambios que se pueden realizar y que no son detectados por las pruebas.
La prueba de mutación es similar a medir cobertura de código. Su objetivo es identificar código no cubierto por las pruebas, o posiblemente que parece estar cubierto por pruebas porque las líneas de código se están ejecutando durante una prueba, pero los resultados mismos, como el valor de retorno de una función de contrato o los eventos publicados, no están siendo probados.
Cómo realizar Pruebas de Mutación
La herramienta cargo-mutants
se puede utilizar para modificar automáticamente e iterativamente el código de Rust, y volver a ejecutar las pruebas después de cada mutación, para identificar código no probado.
-
Instalar
cargo-mutants
:cargo install --locked cargo-mutants
-
Ejecuta el comando
cargo mutants
dentro del directorio del crate de tu contrato.$ cargo mutants
Found 4 mutants to test
ok Unmutated baseline in 19.0s build + 0.6s test
INFO Auto-set test timeout to 20s
MISSED src/lib.rs:14:9: replace IncrementContract::increment -> u32 with 1 in 0.4s build + 0.4s test
4 mutants tested in 23s: 1 missed, 3 caughtEl código que se identifica como no cubierto por una prueba será mostrado como una línea
MISSED
en la salida.Las diferencias de cada cambio que se intentó pueden encontrarse en el directorio
mutants.out/diff
.
Guías en esta categoría:
📄️ Pruebas Unitarias
Las pruebas unitarias son pruebas pequeñas que prueban contratos inteligentes.
📄️ Simulación
Simular contratos de dependencia en pruebas.
📄️ Prueba de Autorización
Escribe pruebas que verifiquen la autorización del contrato.
📄️ Eventos de Prueba
Escribe pruebas que verifiquen los eventos de contrato.
📄️ Pruebas de Integración
Las pruebas de integración utilizan contratos de dependencia en lugar de simulaciones.
📄️ Pruebas de Integración con Datos de Mainnet
Las pruebas de integración utilizan contratos de dependencia en lugar de simulaciones.
📄️ Fuzzing
Fuzzing y pruebas de propiedades para encontrar comportamientos inesperados.
📄️ Pruebas Diferenciales
Las pruebas diferenciales detectan cambios no intencionados.
📄️ Pruebas Diferenciales con Imágenes de Prueba
Prueba diferencial utilizando imágenes de prueba automáticas.
📄️ Pruebas de Mutación
La prueba de mutación encuentra código no probado.
📄️ Cobertura de Código
Las herramientas de cobertura de código encuentran código no probado.