[quote=saoj]Sou contra testes unitários. Na verdade entendi recentemente porque eu sou contra os testes unitários. Como tudo na vida, existem duas correntes diametralmente opostas no desenvolvimento de software:
1 - Teórica, que acha que complexidade indica que o programador é foda, que quanto mais classes e interfaces melhor, que as classes precisam ser isoladas e cheio de padrões GOF para serem bonitas, que bonecas russas é a melhor maneira de fazer software, etc.
2 - Prática, que acredita no princípio KISS, que não admite complexidade, que entende que deve ser fácil olhar apara um sistema e entendê-lo sem ter que fazer um esforço cerebral muito grande, que entende que o número de classes, entidades e interfaces de um sistema deve ser minimizado, que prefere uma hierarquia simples de heranca a bonecas-russas, etc.
Para o 1, teste unitário dá um alívio, do tipo: eu fiz um sistema gigantesco e complexo que nem eu mesmo entendo, mas pelo menos tenho um coverage de testes unitários em 90%. Na prática o quanto esses testes vão evitar bugs? Pouco. Na prática os testes unitários garantem a qualidade do sistema? Não.
Para o 2, testes unitários são totalmente desnecessários e um pé no saco. Como falaram aí em cima, é porque “esse grupo não entende nada de desenvolvimento de software”, UML, padrões GOF, bonecas-russas, etc.
É quando vc usa composição e o pattern decorator ao extremo, ou seja, vc sai colocando uma objeto dentro do outro, fazendo proxies, wrappers, delegates, etc.
Fica bem abstraído, separado, mas difícil de entender na minha opinião.
O Matroska Pattern nunca é bom.
Ele é diferente de “Prefira composição à herança”. Ele é “encapsule tudo em tudo e use!”
Eu também não gosto muito do conceito de teste unitário.
Talvez por causa das minhas experiências profissionais, talvez por eu ser alguém acomodado, mas eu sempre vi todo o qualquer sistema como uma junção de muitas e muitas peças distintas. A complexidade de todo sistema que já trabalhei está na junção de todas as peças. O teste de uma peça só deveria ser relevante se esta peça for complexa E única, sem a possibilidade de quebrar em pequenas outras peças.
Concordo!
Por exemplo, componentes que são utilizados por outros sistemas e que fazem calculos muito complexos.
Trabalhei em um componente destes e digo que quanto mais testes unitários era melhor… eles realmente ajudavam!