Decisões de qualidade que separam o teste como cerimônia do teste como ferramenta.
TDD sempre, ou só onde faz sentido?
TDD funciona melhor quando o problema é razoavelmente bem-definido e
o ciclo é curto (lógica de domínio, parsers, transformações). Funciona
mal em exploração (UI nova, integração com API desconhecida, bibliotecas
de terceiros sem clareza). Em projetos exploratórios, escreva código
spike primeiro, jogue fora, e implemente com TDD a versão final.
"TDD obrigatório em tudo" é dogma; "TDD onde fortalece" é prática.
Cobertura como métrica — útil ou enganosa?
Cobertura mede se o código foi executado, não se foi
verificado. Você pode ter 100% de cobertura sem nenhuma
assertion útil. Use cobertura como sinal de alerta (caiu de 80%
para 60%? algo mudou) e não como meta. Para verificar qualidade
real dos testes, use mutation testing — ele mede se os testes
pegam bugs introduzidos propositalmente.
Mocks ou fakes para dependências externas?
Fakes (implementações alternativas funcionais) quase sempre vencem.
Um InMemoryUserRepository que implementa a mesma interface
que PostgresUserRepository permite testar lógica de
domínio rapidamente, com comportamento real. Mocks excessivos
verificam como o código foi escrito (chamadas, ordem) em
vez de o que ele faz. Mocks são apropriados para fronteiras
de protocolo e efeitos colaterais sem outra alternativa.
E2E quanto e onde?
E2E é caro, lento e frágil — mas pega bugs que nenhum teste isolado
pegaria. Use poucos, em caminhos críticos do usuário (login, checkout,
ações que se erradas custam reputação ou receita). Não tente cobrir
todas as variantes — isso é trabalho dos testes de integração e
unidade. E2E foca em garantir que o sistema está vivo e funciona
ponta a ponta.
Quando contract testing vs E2E entre serviços?
Em arquitetura de microsserviços, E2E entre todos os serviços vira
inviável: combinatórias explodem, ambiente fica frágil, builds
lentos. Contract testing (Pact, OpenAPI) verifica que cada serviço
cumpre o contrato que outros consomem, sem precisar subir todos
juntos. E2E vira último recurso, focado em fluxos críticos.