Pruebas Diferenciales con Imágenes de Prueba
Las pruebas están escritas para garantizar que los contratos se comporten hoy como se espera, y en el futuro también. Con el tiempo, un contrato puede cambiar y en todo el desarrollo de software permanece la posibilidad de que los cambios causen efectos secundarios inesperados. Las pruebas son una de las maneras en que identificamos cambios inesperados.
Sin embargo, las pruebas son limitadas, ya que solo muestran cambios en los valores sobre los que las pruebas afirman.
Las imágenes de prueba son una herramienta para realizar pruebas diferenciales. Consulta Pruebas Diferenciales para otras maneras.
Imágenes de Prueba
El SDK de Soroban Rust genera imágenes de prueba en cada prueba que involucra un Env
. Las imágenes de prueba están habilitadas por defecto. Al final de la prueba, el Env
escribe un archivo JSON en el directorio test_snapshots
con una imagen completa de todos los eventos publicados y el estado final del almacenamiento del ledger.
La mayoría de las pruebas tienen un solo Env
y resultarán en una sola imagen de prueba. Las pruebas que tienen múltiples Env
s escribirán múltiples imágenes de prueba, una para cada Env
. Los archivos de imagen de prueba se nombran con un número creciente al final para separar las imágenes de prueba para cada Env
.
Cómo Usar Imágenes de Prueba
-
Escribe pruebas utilizando el
Env
predeterminado. Por ejemplo:#![cfg(test)]
use soroban_sdk::Env;
use crate::{Contract, ContractClient};
#[test]
fn test_abc() {
let env = Env::default();
let contract_id = env.register_contract(None, Contract);
let client = ContractClient::new(&env, &contract_id);
assert_eq!(client.increment(), 1);
// At the end of the test the Env will automatically write a test snapshot
// to the following directory: test_snapshots/test_abc.1.json
} -
Ejecuta las pruebas y observa que las imágenes de prueba se han escrito en
test_snapshots/
. -
Confirma las imágenes de prueba en el control de versiones.
-
En actualizaciones futuras, presta atención a los cambios en las imágenes de prueba en pruebas que sean inesperados. Por ejemplo, al cambiar una parte de un contrato, si las imágenes de prueba de otras partes del contrato o pruebas de fin a fin no relacionadas cambian, eso podría señalar que han ocurrido efectos secundarios.
-
Difunde imágenes de prueba según sea necesario para buscar pistas sobre por qué ha ocurrido un cambio inesperado.
Los archivos de imágenes de prueba son verbosos. Las imágenes de prueba son más útiles cuando aparecen cambios y pueden ser diferenciadas, como un nuevo evento que se publica o un cambio en el almacenamiento.
Para probar esto, consulta el contrato Comenzar o cualquiera de los ejemplos, ejecuta las pruebas y busca las imágenes de prueba en el disco.
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.
📄️ Pruebas de Integración
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.
📄️ Prueba de Autorización
Escribe pruebas que verifiquen la autorización del contrato.
📄️ Eventos de Prueba
Escribe pruebas que verifiquen los eventos de contrato.