Pruebas de Integración con Datos de Mainnet
Probar con datos de mainnet es otra forma de prueba de integración, donde no solo se pueden usar contratos de mainnet, sino también sus datos en mainnet.
Nuestra capacidad para probar un contrato que depende de otro contrato está limitada a nuestro propio conocimiento de este otro contrato y los diferentes estados en los que puede estar. Las pruebas de integración, donde se utilizan dependencias reales, eliminan algunas suposiciones, pero si una dependencia tiene un estado complejo, también puede ser útil probar contra datos de mainnet tal como existen en diferentes momentos.
Probar con datos de mainnet es una forma de cerrar aún más la brecha.
El Soroban Rust SDK y el Stellar CLI se unen para hacer posible las pruebas con datos de mainnet.
Cómo Escribir Pruebas con Datos de Mainnet
El siguiente es un ejemplo de una prueba que incluye un contrato de dependencia en la prueba, en lugar de simularlo. La prueba está escrita para probar el contrato increment-with-pause y el contrato pause. El contrato tiene una función increment
que aumenta el valor de un contador en uno en cada invocación. El contrato depende del contrato pause para controlar si la funcionalidad de incremento está pausada.
Las siguientes pruebas configuran el contrato increment-with-pause
, utilizando una imagen del ledger que ya tiene el contrato de dependencia pause
implementado junto con sus datos del contrato.
-
Usa el comando [stellar snapshot create] para crear una imagen del contrato pause y sus datos.
stellar snapshot create --address C... --output json --out snapshot.json
informaciónLa opción
--ledger <ledger-seq>
se puede agregar para especificar un ledger a capturar. Cuando no se especifica, se captura el último ledger que se ha enviado a archivos, que generalmente tiene menos de 5 minutos. -
Usa
Env::from_ledger_snapshot_file(...)
para cargar la imagen en unEnv
en la prueba.let env = Env::from_ledger_snapshot_file("snapshot.json");
-
Escribe una prueba similar a la siguiente que use el
Env
precargado con los contratos y los datos del contrato ensnapshot.json
. La prueba realiza afirmaciones sobre el comportamiento del contrato principal en el contexto de las dependencias reales y los datos que estas tienen en la red.#[test]
fn test() {
let env = Env::from_ledger_snapshot_file("snapshot.json");
let contract_id = env.register(
IncrementContract,
IncrementContractArgs::__constructor(&pause_id),
);
let client = IncrementContractClient::new(&env, &contract_id);
assert_eq!(client.increment(), 1);
}
La mayoría de las pruebas, ya sean unitarias, simuladas o de integración, se verán muy similares a la prueba anterior. Las pruebas harán cuatro cosas:
- Crear un entorno, el
Env
, ya sea conEnv::default()
oEnv::from_ledger_snapshot_file(...)
. - Registrar el/los contrato(s) a probar.
- Invocar funciones usando el cliente generado.
- Afirmar el resultado.
Las imágenes creadas desde testnet o mainnet también pueden ser una forma de probar y depurar incidentes con un contrato en la red. Se puede crear una imagen en un ledger específico y escribir pruebas usando esa imagen para entender mejor por qué o cómo ocurrió una serie de eventos.
Se puede crear una imagen de cualquier contrato implementado en mainnet o testnet usando el comando stellar snapshot create
. Puede ser una forma divertida de experimentar y aprender sobre contratos implementados al cargar una imagen en una prueba e invocar el contrato. Fuzzing incluso se puede realizar en contratos usando esta herramienta.
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.
📄️ Prueba de Autorización
Escribe pruebas que verifiquen la autorización del contrato.
📄️ Eventos de Prueba
Escribe pruebas que verifiquen los eventos de contrato.
📄️ Pruebas de Integración
Las pruebas de integración utilizan contratos de dependencia en lugar de simulaciones.
📄️ Pruebas de Integración con Datos de Mainnet
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.
📄️ Cobertura de Código
Las herramientas de cobertura de código encuentran código no probado.
📄️ Pruebas de Mutación
La prueba de mutación encuentra código no probado.