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.
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.