Um tema recorrente que me deparei na minha carreira é ser o novo desenvolvedor a entrar em uma equipe e ter rapidamente uma desconfiança inerente à unidade existente e aos conjuntos de testes de integração.
Durante a entrevista, a gerência lhe diz que eles "apóiam fortemente o teste de unidade" e que o encorajam abertamente. Eles fazem, mas tudo sobre os testes em si é simplesmente errado. Como o fato de estarem reivindicando 100% de cobertura quando houver 100% de cobertura de teste de integração, mas menos de 10% de cobertura de teste de unidade repetível. Alguns outros problemas que encontrei:
Nenhuma indicação clara entre o que é um teste de unidade e o que é um teste de integração. Os testes de unidade e integração são combinados na mesma classe.
Testes de integração que possuem dependências explícitas não declaradas de dados dinâmicos muito específicos no banco de dados de um ambiente específico.
Testes de integração não transacional, basicamente testes que podem ou não se preocupar em limpar depois de si mesmos, às vezes exigindo "limpeza" manual do banco de dados para tornar o teste repetitivo.
Nenhuma zombaria, e o código do aplicativo requer uma grande revisão apenas para que a zombaria seja possível. Em outras palavras, projete sem testar.
Não há convenções de nomenclatura claras para examinar rapidamente o nome de um teste e determinar aproximadamente quais testes estão sendo feitos.
Isso não quer dizer que TODOS os testes são inúteis ou ruins, muitos deles são muito bons e merecem ser mantidos, mas às vezes parece garimpar ouro. Eu evitava propositalmente executar testes apenas porque tinha medo de danificar o banco de dados para meus casos de teste de caixa preta.
Isso essencialmente me deu uma desconfiança inerente aos testes de unidade e integração que não escrevi ou revi pessoalmente de alguma forma. Em algum nível, se você não acredita na qualidade do seu conjunto de testes, isso realmente não agrega valor à equipe ou ao projeto.
O que você faz quando se encontra nessa situação? O que você acha que o melhor plano de ataque seria enfrentar algo assim?
Todos os testes devem ser refatorados em um esforço monumental que abrange versões? Você deveria simplesmente abandonar a ideia de que este projeto herdado possa ter um dia de cobertura sólida de teste de unidade?