O Que É Isolamento de Testes? Explicação
Isolamento de testes significa que cada teste roda como se fosse o único, sem estado compartilhado vazando para dentro de ou para fora de qualquer outro teste.
Quando testes compartilham estado, seus resultados dependem do que rodou antes deles e de como foram ordenados ou paralelizados. Esse acoplamento é uma origem clássica de flakiness: uma suíte passa em uma ordem e falha em outra. O isolamento remove o acoplamento para que cada teste tenha um ponto de partida limpo e previsível.
O que o isolamento significa
Um teste isolado não depende de, e não afeta, nenhum outro teste. Ele monta suas próprias fixtures, usa seus próprios dados e faz sua própria limpeza depois. Rode-o sozinho, rode-o primeiro, rode-o por último, rode-o em paralelo; o resultado é o mesmo.
O que quebra o isolamento
- Globais mutáveis ou singletons compartilhados carregados entre testes.
- Um banco de dados ou sistema de arquivos deixado sujo por um teste anterior.
- Caches no nível de módulo que persistem por toda a suíte.
- Serviços externos cujo estado um teste altera para outro.
Por que ele evita flakiness
Falhas dependentes de ordem e de paralelismo só existem quando os testes compartilham estado. Se todo teste começa limpo e não deixa nada para trás, a ordem em que ele roda não pode mudar o resultado. Ferramentas que randomizam a ordem dos testes são úteis precisamente porque expõem falhas ocultas de isolamento.
Como alcançá-lo
Reinicie ou recrie o estado antes de cada teste (transações que fazem rollback, diretórios temporários novos, schemas de banco de dados por teste). Evite globais mutáveis compartilhados. Faça o setup e o teardown simétricos para que nada vaze. Um bom isolamento é o que torna a execução paralela de testes segura e rápida.
A perspectiva da Latchkey
O isolamento é uma propriedade da sua suíte de testes, não do runner, então é seu para acertar. Mas um ambiente de runner limpo por job ajuda: os managed runners da Latchkey dão a cada job uma máquina nova, e a autocorreção lida com as falhas transitórias de infraestrutura para que a flakiness restante aponte claramente para bugs de isolamento.
Principais conclusões
- Isolamento de testes significa que cada teste roda de forma independente, sem estado compartilhado.
- Globais compartilhados, bancos de dados sujos e caches quebram o isolamento.
- O isolamento remove flakiness dependente de ordem e de paralelismo.
- Reinicie o estado por teste e evite globais mutáveis compartilhados.