Saltar al contenido principal

Detectar Cambios Inesperados con Imágenes de Prueba

Se escriben pruebas para asegurar que los contratos se comporten hoy como se espera, y también en el futuro. Con el tiempo, un contrato puede cambiar y en todo desarrollo de software siempre existe 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 que las pruebas afirman.

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, registrados 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 Envs escribirán múltiples imágenes de prueba, una para cada Env. Los archivos de imagen de prueba son nombrados con un número incremental al final para separar las imágenes de prueba de cada Env.

Cómo Usar Imágenes de Prueba

  1. Escribe pruebas utilizando el Env por defecto. 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
    }
  2. Ejecuta las pruebas y verifica que las imágenes de prueba se hayan escrito en test_snapshots/.

  3. Haz un commit de las imágenes de prueba en el control de versiones.

  4. En futuras actualizaciones, busca 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 extremo a extremo no relacionadas cambian, eso podría señalar que han ocurrido efectos secundarios.

  5. Si es necesario, compara las imágenes de prueba para buscar pistas de por qué puede haber ocurrido el cambio inesperado.

Nota que las imágenes de prueba son extremadamente verbosas y entender cada una en aislamiento puede no ser realista. Las imágenes de prueba son más útiles cuando aparecen cambios y pueden ser comparadas, como la publicación de un nuevo evento, o un cambio en el almacenamiento.

Para probar esto, revisa el contrato de Comenzar o cualquiera de los ejemplos, ejecuta las pruebas y busca las imágenes de prueba en el disco.