Pular para conteúdo

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.