Testes unitários / Mocks são realmente necessários?

[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.

[/quote]

Completamente de acordo!

Melhor aprender a escrever testes decentemente do que fazer testes só pra ter cobertura e não garantir nada!

Não conhecia esse termo bonecas russas, o que significa?

É 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.

Foto das bonecas => http://www.baixaki.com.br/papel-de-parede/15642-boneca-russa.htm

Valeu

É não posso falar sem nunca ter visto aplicado e tal mas só de ouvir falar já soa esquisito.

Parece ser aquele coisa que bem aplicada pode até dar algum resultado, porém, se perder a mão um pouquinho já vira um macarrão daqueles.

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!