Skip to content
Latchkey

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.

Guias relacionados