Mejores prácticas de pruebas
Un resumen condensado de las 25 prácticas más importantes para probar programas de Solana extraídas de cada página de esta sección.
-
Capas de pirámide: Pruebas unitarias LiteSVM/Mollusk primero, integración Bankrun/anchor segundo, E2E de validador al final (Conceptos básicos de pruebas).
-
Siempre
--reseten CI: Ledger determinista para trabajos de validador (Pruebas contra un validador). -
Recompilar
.soantes de las pruebas:anchor buildprecede acargo testy ejecuciones de fuzzing. -
Pruebas negativas por ix: Al menos un caso de fallo por
#[error_code](Catálogo Sealevel). -
Pruebas de omisión de firmante: La metadatos de autoridad con
is_signer: falsedeben fallar. -
Pruebas de discrepancia de acuñación: Acuñación de bóveda incorrecta para restricciones de bóveda.
-
Pruebas de bump de PDA: El bump canónico tiene éxito; el bump incorrecto falla (Pruebas de CPI y PDA).
-
Pruebas de ID de programa CPI: Cuenta de programa impostor rechazada.
-
Cargar SPL Token en VM: Añadir el programa de token a LiteSVM/Mollusk para rutas CPI.
-
Pruebas de verificaciones-efectos-interacciones: El doble retiro de callback de reentrada debe fallar.
-
Pruebas de obsolescencia de oráculo: Avanzar el reloj más allá de
max_agey esperar un error. -
Prueba de doble llamada de reinicialización: La segunda
init_if_neededno debe restablecer el administrador. -
Fuzzing antes de la auditoría: Trident en manejadores matemáticos, nocturno durante 1h+ (Fuzzing).
-
Aserciones de invariantes en fuzzing: No solo caza de fallos, sino codificación de invariantes económicos.
-
Verificaciones de rango de CU:
Check::compute_unitsde Mollusk con rangos, no pines exactos. -
Bankrun para velocidad TS: Lógica de Anchor masiva sin inicio de validador (Bankrun).
-
anchor testpara flujos SPL: Rutas reales de acuñación de tokens/creación de ATA (Anchor TS). -
Surfpool para E2E de DeFi: Bifurcación de mainnet sobre largas listas de clones.
-
Fijar la cadena de herramientas en CI: El validador Agave 4.1.1 coincide con los artefactos de despliegue.
-
Eliminar huérfanos del puerto 8899: Paso previo en CI antes de los trabajos del validador.
-
Par de claves único por prueba: Prevenir inestabilidad por fuga de estado.
-
Coincidir clúster de Anchor.toml: La URL del proveedor coincide con el validador/devnet en ejecución.
-
Regenerar IDL en PR: El cambio de nombre de cuenta rompe las pruebas si la IDL está obsoleta.
-
Archivar corpus de fuzzing: Adjuntar estadísticas al paquete de auditoría.
-
Sin puertas de fusión de devnet: Localnet/Surfpool para CI; humo de devnet opcional.
Preguntas frecuentes
¿Cuál es la pila de pruebas mínima?
Pruebas negativas LiteSVM + anchor test en localnet reiniciado para proyectos Anchor.
¿Cuántas pruebas negativas?
Al menos una por restricción y por clase de catálogo que toque la instrucción.
¿Debería ejecutarse el fuzzing en cada PR?
Un "smoke test" corto sí; ejecuciones largas nocturnas en la rama principal.
Relacionado
- Conceptos básicos de pruebas - entrada de sección
- LiteSVM - capa de unidad rápida
- Mejores prácticas de seguridad - código seguro bajo prueba
- Mejores prácticas de desarrollo local - configuración del validador
Versiones de la pila: Esta página se escribió para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 y LiteSVM 0.6.x.