Saltar al contenido principal

Pruebas Unitarias

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

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 crate::{IncrementContract, IncrementContractClient};
use soroban_sdk::Env;

#[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

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 de 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.

Es una prueba simple, pero es una prueba completa. Hay una configuración de entorno completa que se utiliza y se destruye en la prueba, y sucede rápido. 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.
  2. Registrar el/los contrato(s) a probar.
  3. Invocar funciones usando un cliente.
  4. Afirmar el resultado.