Eu ouço muito dos profissionais do TDD que uma das vantagens do TDD é que ele força os desenvolvedores a seguir os princípios do SOLID (responsabilidade única, aberto-fechado, substituição de Liskov, segregação de interface e inversão de dependência). Mas, quanto a mim, basta escrever alguns testes (principalmente teste de unidade) para entender que é importante seguir o SOLID (e assim criar uma arquitetura testável).
O TDD força os desenvolvedores a seguir o SOLID mais ativamente do que apenas escrever testes de unidade?
unit-testing
tdd
solid
SiberianGuy
fonte
fonte
Respostas:
Antes de tudo, o TDD não o força estritamente a escrever código SOLID. Você poderia fazer TDD e criar uma grande bagunça, se quisesse.
Obviamente, conhecer os princípios do SOLID ajuda, porque, caso contrário, você pode simplesmente não ter uma boa resposta para muitos dos seus problemas e, portanto, escrever um código incorreto acompanhado de testes ruins.
Se você já conhece os princípios do SOLID, o TDD o incentivará a pensar sobre eles e usá-los ativamente.
Dito isso, ele não necessariamente cobre todas as letras do SOLID , mas incentiva e promove fortemente a você escrever pelo menos parcialmente o código do SOLID, pois torna as conseqüências de não fazê-lo imediatamente visíveis e irritantes.
Por exemplo:
A adesão ao princípio Aberto / Fechado pode ajudar os testes escritos após o código, porque geralmente permite substituir chamadas de serviço externas em classes de teste derivadas das classes em teste. No TDD, acredito que isso não é tão necessário quanto outros princípios, mas posso estar enganado.
A adesão à regra de substituição de Liskov é ótima se você deseja minimizar as alterações para que sua classe receba uma instância não suportada que apenas implementa a mesma interface de tipo estaticamente, mas não é provável que isso aconteça em casos de teste adequados, porque você geralmente não passa em nenhuma classe em teste as implementações reais de suas dependências.
Mais importante, os princípios do SOLID foram criados para incentivá-lo a escrever código mais limpo, mais compreensível e sustentável, assim como o TDD. Portanto, se você faz o TDD corretamente e presta atenção à aparência do seu código e dos seus testes (e não é tão difícil porque você obtém feedback imediato, API e precisão), você pode se preocupar menos com os princípios do SOLID, em geral.
fonte
Não
O TDD pode facilitar o acompanhamento de boas práticas devido à refatoração contínua, mas não obriga a seguir nenhum princípio. Tudo o que faz é garantir que o código que você escreve seja testado. Você pode seguir os princípios que desejar ao escrever um código para satisfazer o teste; ou nenhum princípio.
fonte
Meu entendimento dos Princípios do SOLID se expandiu em uma ordem de magnitude quando comecei a fazer TDD. Assim que comecei a pensar em como zombar de dependências, percebi que praticamente todos os componentes da base de código tinham uma implementação alternativa em potencial. E quão mais fácil é testar uma API pública simples.
Também forneceu uma compreensão muito mais forte da maioria dos padrões de design. Especialmente o padrão de estratégia.
fonte
Sim : o TDD é principalmente uma boa técnica de design (e apenas uma técnica de teste secundária). Ajuda muito a alcançar os princípios sólidos, embora ainda sejam possíveis exemplos (patológicos) de TDD com muitos odores de código.
A conexão entre o TDD e os princípios sólidos é discutida (com a conclusão acima) neste excelente podcast em minutos, chamado "Desenvolvimento Orientado a Testes é Design - A Última Palavra no TDD" .
fonte