Saltar al contenido principal

Pruebas Unitarias

Las pruebas unitarias son pruebas pequeñas que prueban una pieza de funcionalidad dentro de un contrato.

Cómo Escribir Pruebas Unitarias

El siguiente es un ejemplo de una prueba unitaria, escrita para probar el increment contract. El contrato tiene una función increment, que aumenta el valor de un contador en uno en cada invocación. La siguiente prueba invoca varias veces la función de ese contrato y comprueba que el valor aumenta en uno.

#![cfg(test)]
use soroban_sdk::Env;
use crate::{IncrementContract, IncrementContractClient};

#[test]
fn test() {
let env = Env::default();
let contract_id = env.register(IncrementContract, ());
let client = IncrementContractClient::new(&env, &contract_id);

assert_eq!(client.increment(), 1);
assert_eq!(client.increment(), 2);
assert_eq!(client.increment(), 3);
}

Ref: https://github.com/stellar/soroban-examples/blob/main/increment/src/test.rs

En la prueba hay una configuración completa del entorno, utilizada y destruida en la prueba, y ocurre rápidamente. El arnés de prueba de Rust ejecuta todas las pruebas para un contrato en paralelo y cada una tendrá su propio entorno de contrato aislado.

La mayoría de las pruebas, incluso las pruebas de integración y las pruebas de fuzz, se parecerán mucho a esta prueba unitaria. Hacer cuatro cosas:

  1. Crear un entorno, el Env.

    let env = Env::default();
  2. Registrar el/los contrato(s) a probar. Incluye como segundo parámetro cualquier parámetro de constructor.

    let contract_id = env.register(IncrementContract, ());
  3. Invoca funciones usando el cliente generado.

    let client = IncrementContractClient::new(&env, &contract_id);
    client.increment()
  4. Afirmar el resultado.

    assert_eq!(client.increment(), 1);
consejo

Las pruebas están escritas en Rust, junto con el contrato. Las mismas herramientas. Las mismas APIs. El mismo SDK. ¡Sin cambios de contexto! Utiliza tus herramientas y bibliotecas favoritas de Rust que usarías para cualquier prueba de Rust.

información

El Env creado al principio de la prueba no es una simulación del Entorno Soroban. Es el mismo entorno de Soroban que utiliza la mainnet para ejecutar contratos. Solo hay algunas diferencias menores: se habilitan utilidades de prueba y el backend de almacenamiento es diferente.