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:
-
Crear un entorno, el
Env
.let env = Env::default();
-
Registrar el/los contrato(s) a probar. Incluye como segundo parámetro cualquier parámetro de constructor.
let contract_id = env.register(IncrementContract, ());
-
Invoca funciones usando el cliente generado.
let client = IncrementContractClient::new(&env, &contract_id);
client.increment() -
Afirmar el resultado.
assert_eq!(client.increment(), 1);
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.
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.
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.