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.
fonte
Respostas:
Não sei se o TDD foi usado, mas um exemplo estelar de teste é o sqlite, que possui uma cobertura notável de 100% das ramificações e possui mais de 1000 vezes mais códigos e scripts de teste que o código do produto.
fonte
O projeto Orchard pode ser o que você está procurando. É um aplicativo .NET / MVC / TDD bastante complexo, mas não muito ruim, e demonstra algumas boas práticas e padrões.
http://orchard.codeplex.com/wikipage?title=solution
e acho que o link atualizado:
http://docs.orchardproject.net/
fonte
Muitas bibliotecas de código aberto de terceiros são TDDed. As bibliotecas do Hibernating Rhinos, como RhinoMocks e NHibernate, são TDDed por seus desenvolvedores que usam o XUnit como a estrutura de teste de unidade.
Agora, com o OSS, você normalmente não pode garantir que TUDO no produto tenha sido TDDed. A comunidade pode ter padrões, incluindo essa prática, e pode até usar um build-bot que executa métricas de cobertura de código, mas TDD é uma mentalidade que deve ser incorporada pelo desenvolvedor e com o público em geral capaz de se comprometer a abrir troncos VCS de origem como os do GitHub, qualquer pessoa pode cometer qualquer alteração com qualquer quantidade de cobertura de teste (ou se for necessária cobertura, os testes poderiam ter sido gravados após o fato, o que é uma violação do espírito do TDD, mas na verdade não existe uma boa maneira de capturá-lo no commit).
fonte