Skip to content
Latchkey

O Que É Isolamento de Testes?

Isolamento de testes significa que cada teste roda independentemente, sem depender de ou afetar qualquer outro teste.

Uma suíte de testes confiável é aquela em que cada teste se sustenta sozinho. O isolamento de testes é essa propriedade: um teste prepara seu próprio estado, faz suas asserções e limpa, para que seu resultado nunca dependa do que rodou antes dele. Sem isolamento, os testes passam ou falham com base na ordem, o que os torna flaky e impossíveis de paralelizar.

O que o isolamento exige

Um teste isolado não lê estado deixado por outro teste, não deixa estado para trás, e não compartilha globais mutáveis. Ele é dono de suas fixtures, reseta qualquer coisa que toca, e não faz nenhuma suposição sobre a ordem de execução. Cada teste é um experimento limpo.

Como o estado compartilhado quebra uma suíte

Quando os testes compartilham estado, uma variável global, uma linha de banco de dados, um singleton, um teste pode deixar o sistema em um estado que faz outro passar ou falhar. Tais suítes funcionam em uma ordem e quebram em outra, e as falhas parecem aleatórias. O bug é o acoplamento, não os testes individuais.

Um exemplo rápido

Resetar o estado compartilhado antes de cada teste evita que um teste vaze para o próximo.

Enforcing isolation between tests
beforeEach(() => {
  store.reset(); // clear state so tests do not bleed together
});

Técnicas para isolamento

  • Resetar ou reconstruir o estado no setup e teardown.
  • Dar a cada teste sua própria transação ou schema de banco de dados.
  • Evitar globais mutáveis compartilhados e singletons.
  • Fazer stub do relógio e da aleatoriedade para determinismo.

Isolamento e CI paralelo

O isolamento é o pré-requisito para rodar testes em paralelo e por shards, porque testes paralelos não podem colidir sobre recursos compartilhados. Ele também previne a flakiness dependente de ordem. Rodar suítes bem isoladas em runners separados e limpos reforça essa independência, que é parte de como a Latchkey mantém execuções de testes paralelas estáveis.

Principais conclusões

  • Isolamento de testes significa que cada teste roda independentemente dos outros.
  • Estado compartilhado causa falhas flaky dependentes de ordem.
  • O isolamento é o que torna possíveis execuções de CI paralelas e com sharding.

Guias relacionados