Costumo ficar do lado de seus colegas, mas até certo ponto.
O problema dos testes de unidade é que eles são escritos com frequência e sem pensar em casos triviais, nos quais a investigação superficial do código revela que ele funcionará, não importa o quê. Por exemplo:
def add(x, y)
x + y
end
Juntamente com uma dúzia de testes para garantir que a adição funcione de fato para casos de uso escolhidos arbitrariamente. Duh ...
A premissa geral por trás do teste de unidade é: se o seu código não contém bugs, é porque você não testou o suficiente. Agora, quando escrever testes de unidade adequados. Respostas:
- Quando você está testando
- Quando você está depurando
- Como você está desenvolvendo coisas realmente difíceis
Vamos analisar cada um, supondo que você esteja desenvolvendo algum tipo de aplicativo da web.
Você escreve algum código para a nova funcionalidade, e deve funcionar razoavelmente bem até agora. Você acessa seu navegador e verifica se ele funciona testando com mais intensidade, certo? Bzzzt! ... Resposta errada. Você escreve um teste de unidade. Se você não fizer isso agora, provavelmente nunca o fará. E este é um dos lugares onde os testes de unidade funcionam muito bem: para testar funcionalidades de alto nível.
Você descobre um bug (quem nunca perde nenhum?). Isso nos leva ao ponto dois. Você volta ao código e começa a seguir as etapas. Enquanto isso, escreva os testes de unidade nos principais pontos de interrupção, onde é essencial ter dados consistentes e corretos.
O último ponto é o contrário. Você está projetando algumas funcionalidades peludas que envolvem muita meta-programação. Ele gera rapidamente uma árvore de decisão com milhares de cenários em potencial, e você precisa garantir que cada um deles funcione. Ao escrever essas coisas, uma simples mudança de aparência aqui ou ali pode ter consequências inimagináveis na cadeia alimentar. Digamos que você esteja projetando uma implementação MPTT usando gatilhos SQL - para que ele possa trabalhar com instruções de várias linhas.
Nesse tipo de ambiente espinhoso, normalmente você deseja automatizar altamente seus testes. Então, você escreve scripts para automatizar a geração de dados de teste e executa uma carga de testes de unidade nesses dados de teste. Uma coisa crucial a não perder de vista ao fazer isso é que você também precisa escrever testes de unidade para o seu gerador de testes de unidade.
Conclusão: testes de unidade, definitivamente sim. Mas poupe-se das funcionalidades básicas - até que você realmente precise delas para depuração ou para garantir que alguma funcionalidade peluda funcione corretamente (incluindo, neste último caso, os próprios testes).