Olá, Jonas! Tudo bem?
Entendo perfeitamente a sua frustração e agradeço demais por trazer esse ponto com a autoridade de quem atua como Engenheiro de Software. Você tocou em uma ferida real de projetos de larga escala: os Test Flakes (ou testes não determinísticos).
Concordo com você que, para quem está começando, ver um teste passar "agora sim, agora não" sem mudar uma linha de código é a receita ideal para a confusão. O fenômeno ocorre justamente porque os testes de integração, por natureza, tocam em recursos externos (como o banco de dados) e, sem o devido isolamento, um teste acaba herdando o "lixo" ou o estado deixado pelo anterior.
Sobre a estratégia de Transações e Rollbacks
Sua sugestão é cirúrgica. Utilizar IDbContextTransaction com um rollback ao final de cada Fact ou Theory é uma das formas mais elegantes e performáticas de garantir que o banco volte ao estado original sem o custo de deletar e recriar o esquema a cada execução.
Outras abordagens que poderiam mitigar isso no contexto do curso seriam:
- Respawn: O uso de bibliotecas como o Respawn para resetar o banco de dados para um estado limpo rapidamente.
- Isolamento por Banco: Criar um banco de dados único (como um GUID no nome do DB) por classe de teste ou coleção.
- Data Cleaning: Métodos de
Dispose mais rigorosos para garantir a limpeza.
O equilíbrio no ensino
Muitas vezes, em cursos introdutórios de ferramentas específicas (como o uso de uma biblioteca de API), acaba-se priorizando o "como a ferramenta funciona" em detrimento do design de infraestrutura de teste para manter a carga cognitiva focada no novo framework. No entanto, como você bem pontuou, as boas práticas de engenharia não deveriam ser sacrificadas, pois elas evitam que o aluno aprenda "vícios" de desenvolvimento.
Sua observação é extremamente valiosa para a evolução do material. Vou registrar esse feedback internamente para que a equipe de conteúdo avalie a inclusão de uma aula extra ou um artigo complementar abordando exatamente essas estratégias de isolamento de estado, transformando essa "má prática" em uma oportunidade de ensinar sobre resiliência de suítes de teste.
Obrigado por contribuir para elevar o nível técnico da comunidade!
Espero que possa ter lhe ajudado!