Melhores práticas de testes
Resumo condensado das 25 práticas mais importantes de teste de programas Solana extraídas de cada página desta seção.
-
Camadas da pirâmide: Testes unitários LiteSVM/Mollusk primeiro, integração Bankrun/anchor segundo, E2E validador por último (Noções básicas de testes).
-
Sempre --reset no CI: Ledger determinístico para jobs de validador (Testando contra validador).
-
Rebuild .so antes dos testes:
anchor buildprecedecargo teste execuções fuzz. -
Testes negativos por ix: Pelo menos um caso de falha por
#[error_code](Catálogo Sealevel). -
Testes de omissão de signer: Meta authority com
is_signer: falsedeve falhar. -
Testes de mismatch de mint: Mint ATA errado para restrições de vault.
-
Testes de bump PDA: Bump canônico sucede; bump errado falha (Testando CPIs e PDAs).
-
Testes de program ID CPI: Conta de programa impostor rejeitada.
-
Carregue SPL Token na VM: Adicione token program ao LiteSVM/Mollusk para caminhos CPI.
-
Testes checks-effects-interactions: Callback de reentrância double-withdraw deve falhar.
-
Testes de obsolescência de oracle: Avance clock além de max_age e espere erro.
-
Teste double-call reinit: Segundo
init_if_needednão deve resetar admin. -
Fuzz antes da auditoria: Trident em handlers de math 1h+ nightly (Fuzzing).
-
Asserts de invariante no fuzz: Não só caça de crash - invariantes econômicos codificados.
-
Checks de faixa CU: Mollusk
Check::compute_unitscom ranges não pins exatos. -
Bankrun para velocidade TS: Lógica Anchor em massa sem spin-up de validador (Bankrun).
-
anchor test para fluxos SPL: Caminhos reais de criação mint/ATA token (Anchor TS).
-
Surfpool para E2E DeFi: Fork mainnet em vez de listas longas de clone.
-
Fixe toolchain no CI: Validador Agave 4.1.1 combina com artefatos de deploy.
-
Mate órfãos porta 8899: Pre-step no CI antes de jobs de validador.
-
Keypairs únicos por teste: Evite flakiness por vazamento de estado.
-
Combine cluster Anchor.toml: URL do provider igual ao validador/devnet em execução.
-
Regen IDL no PR: Rename de conta quebra testes se IDL obsoleta.
-
Arquive corpus fuzz: Anexe stats ao pacote de auditoria.
-
Sem gates de merge devnet: Localnet/Surfpool para CI; smoke devnet opcional.
FAQs
Qual é a stack mínima de testes?
Testes negativos LiteSVM + anchor test em localnet reset para projetos Anchor.
Quantos testes negativos?
Pelo menos um por restrição e por classe do catálogo que toca a instrução.
Fuzz deve rodar em todo PR?
Smoke curto sim; execuções longas nightly na branch main.
Relacionados
- Noções básicas de testes - entrada da seção
- LiteSVM - camada unitária rápida
- Melhores práticas de segurança - código seguro sob teste
- Melhores práticas de dev local - setup de validador
Versões da stack: Esta página foi escrita 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 e LiteSVM 0.6.x.