Substitutos, Contratos e Testes Baseados em Propriedades¶
Nenhum estilo estabelece toda a correção. Escolha nível e técnica conforme o defeito detectável e mantenha alguns testes em limites reais onde substitutos ocultariam risco.
Substitutos de teste¶
| Substituto | Papel |
|---|---|
| Stub | Retorna valores controlados para conduzir um caminho |
| Fake | Implementação simplificada funcional, como repositório em memória |
| Spy | Registra chamadas para observação posterior |
| Mock | Verifica um protocolo programado de interações |
Use-os em limites estáveis sob seu controle. Mockar sequências internas encarece refatoração e testa implementação. Fake em memória não reproduz necessariamente transações, restrições, collation ou consultas reais.
Testes de contrato¶
Verificam premissas em um limite: HTTP, esquema de mensagem, repositório ou adaptador externo. Contratos orientados pelo consumidor ajudam coordenação, mas não provam compatibilidade, desempenho, autorização ou efeitos. Versione-os e combine-os com integrações reais selecionadas.
Testes baseados em propriedades¶
Ferramentas geram entradas e reduzem falhas a contraexemplos menores. Para ordenação:
- saída não decrescente;
- preservação do comprimento e multiconjunto;
- ordenar duas vezes equivale a uma;
- resultado concorda com oráculo confiável.
Geradores definem o domínio. Inclua vazio, duplicatas, extremos e estruturas. Registre seed e contraexemplo mínimo.
Controle do não determinismo¶
Injete relógio, gerador aleatório, escalonador ou fonte de IDs. Evite sleeps; aguarde condição observável com deadline ou use tempo virtual. Isole estado externo e explicite posse em testes paralelos. Teste instável deve ser diagnosticado.
Complementos¶
Mutation testing avalia se testes detectam mudanças; não é meta de cobertura. Análise estática, model checking, fuzzing e prova formal cobrem outras classes. Benchmarks medem desempenho com metodologia estatística própria.
No Spring Boot, use slices em limites do framework e testes amplos com infraestrutura real quando semântica de banco ou broker importar. Testcontainers oferece serviços descartáveis, mas ainda exige dados, timeouts e asserções determinísticas.