Existem aplicativos de código aberto desenvolvidos usando desenvolvimento orientado a testes que servem como modelos de como o bom teste de unidade deve funcionar?
Eu preferiria ver exemplos em C # e .NET. (Observe que mencionei aplicativos, não apenas bibliotecas.)
Sou um programador de nível intermediário que realmente quer acreditar e praticar o TDD. O aplicativo em que trabalho no meu dia-a-dia é bastante complicado - cerca de 1 milhão de linhas de código - e eu adoraria introduzir mais testes de unidade. Temos alguns testes de unidade em funcionamento, mas meus esforços no TDD e com o trabalho no código que já está sendo testado não foram animadores.
Na minha experiência reconhecidamente limitada, o TDD parece incentivar muita complexidade em nome da dissociação. Os bits do aplicativo que são difíceis de testar - e que coincidentemente tendem a ser críticos - são empurrados para a periferia, para o campo de testes de integração que podem ou não ser escritos. (Estou pensando nos suspeitos comuns aqui, no acesso ao sistema de arquivos, na hidratação de objetos de um banco de dados, nas chamadas assíncronas da web etc.)
O código que está sendo testado tende a envolver muita colaboração entre objetos, e talvez alguma lógica simples de fluxo, tudo o que acontece na memória e que pode ser escrito de uma maneira mais simples e compreensível, se tudo não tiver que ser totalmente dissociado. para teste.
Entendo as técnicas para zombar de dependências e coisas do tipo, mas, na minha experiência, o uso pesado de zombaria leva a testes muito frágeis. Se meu primeiro instinto ao ver vários testes ficarem vermelhos é: "Ótimo, agora tenho que consertar todas as zombarias", então meus testes se tornaram uma chatice, e não uma rede de segurança.
Estou tentando superar essa barreira mental e, como parte disso, estou lendo o livro de Michael Feathers, Trabalhando efetivamente com o código legado . Espero que me mostre um pouco do que estou perdendo.
Também gostaria de estudar alguns aplicativos .NET não triviais com boa cobertura de código, talvez um sistema de gerenciamento de conteúdo ou um aplicativo CRUD. A estrutura de teste do FitNesse de que o tio Bob fala é sobre algo que provavelmente examinarei, mas seria bom ver algo escrito na linguagem com a qual estou mais familiarizado.
Todas as sugestões ou palavras de sabedoria serão apreciadas.