Pruebas
🧪 Guía Completa de Testing en Stellar Soroban
🔍 ¿Por qué necesitamos tests? (detallado)
🛡️ Prevención de bugs críticos: detecta errores en lógica de negocio antes de deployment que podrían resultar en pérdida de fondos o estados inconsistentes. 🎯 Validación de edge cases: simula condiciones extremas (overflow, underflow, fondos insuficientes) para asegurar comportamiento robusto. 💰 Protección de inversión: evita costos de re-deployment y pérdida de confianza por bugs en mainnet. 🔄 Refactoring seguro: permite cambiar implementaciones manteniendo garantías de comportamiento. 🧪 Simulación de ataques: prueba vectores de ataque conocidos (reentrancy, front-running, privilege escalation) de forma controlada.
🌟 ¿Qué ofrece Soroban para testing? (explicación técnica)
📦 soroban_sdk::testutils: módulo con herramientas para crear entornos de prueba aislados y mockear comportamientos. 🏗️ Env::default(): crea un entorno de testing limpio con ledger simulado, storage independiente y control total sobre el tiempo. 👤 MockAuth: permite simular firmas y autorizaciones sin claves privadas reales. 📊 Budget tracking: monitorea consumo de CPU y memoria durante tests para optimizar gas costs. 🎭 Address generation: crea direcciones determinísticas para tests reproducibles.
🔧 Herramientas y conceptos clave (más allá de la sintaxis)
Env::default() — qué hace y efectos
Crea un entorno aislado donde cada test ejecuta independientemente
Simula un ledger con timestamp, sequence numbers y storage limpio
Permite control sobre authorizaciones y mock data
Úsalo siempre al inicio de cada función de test
MockAuth patterns
MockAuth::authorize()
: simula que una dirección específica autorizó la transacciónMockAuthInvoke
: para casos complejos con múltiples contratosCuidado: solo para testing; en mainnet require_auth() usa firmas reales
Testing strategies
Unit tests: funciones individuales con inputs específicos
Integration tests: flujos completos entre múltiples funciones
Fuzzing: inputs aleatorios para encontrar casos no contemplados
Attack simulation: reproduce vectores de ataque conocidos
Error handling validation
Usa
should_panic
oassert!(result.is_err())
para validar fallos esperadosVerifica que error codes específicos se generen correctamente
Simula condiciones de falla (fondos insuficientes, permisos incorrectos)
📋 Estrategias y patrones prácticos (con por qué y cuándo usarlas)
Arrange-Act-Assert pattern
Arrange: configura estado inicial (addresses, balances, roles)
Act: ejecuta la función bajo prueba
Assert: verifica resultados esperados
Test data management
Usa direcciones determinísticas para reproducibilidad
Crea helpers para setup común (inicializar contratos, crear usuarios)
Mantén tests independientes — no dependas de estado previo
Mocking strategies
Mock external contracts durante unit tests
Simula condiciones de red (timeouts, failures) en integration tests
Usa MockAuth para probar flujos sin manejar claves privadas
Performance testing
Mide budget consumption para optimizar gas costs
Prueba límites de storage y memoria
Valida que operaciones batch no excedan límites de transacción
💡 Ejemplos Prácticos — Código + explicaciones detalladas (línea a línea)
En proceso...
Last updated
Was this helpful?