Isenção de responsabilidade: Eu não sou anti-unit-testing. Quando as pessoas dizem TDD, eu suponho que elas significam a versão que soa como doença em que estão escrevendo testes antes de escrever o código para 80-100% de todo o código que escrevem.
É um facilitador. Se a captura de problemas de regressão é um problema tão grande para você que o TDD totalmente automático desde o início parece valer a pena, escrever testes para cada último pedaço de código que você escreve pode realmente ajudá-lo a ignorar o problema real.
Ajuda as pessoas a ignorar o problema real. Ao consertar um bug, ele se transforma em um jogo de whack-a-mole, onde mais dois pop-ups, a arquitetura explode. Foco. Concentre-se no problema real. Ver as toupeiras antes que elas precisem ser golpeadas é legal, mas você não deveria estar lá em primeiro lugar.
Come muito tempo. Eu batia erros ocasionais. Não encontro tantos que pareça valer a pena prefixar cada coisa nova que escrevo com um teste. Capture problemas onde eles provavelmente acontecerão. Manipule os erros de maneira que sejam fáceis de diagnosticar. Validar. Teste nos principais pontos de sobreposição / gargalo. Mas, pelo amor de Deus, não teste cada ultimo getter e setter em algo que provavelmente não deveria ter tido em primeiro lugar.
Foco no design: não há absolutamente nenhuma maneira de um bom desenvolvedor escrever o melhor código possível quando também estiver focado no teste. Se parece que é a única maneira de ter um design decente, recomendo ver o item acima sobre "focar no problema real".
Falha no design de macro: a base de código no meu trabalho atual está repleta de interfaces que nunca são usadas mais de uma vez e violações maciças do princípio DRY básico que só finalmente comecei a entender quando percebi que as pessoas estavam escrevendo para as estruturas de teste e testes em geral. O teste não deve levar a arquitetura estúpida. Não, na verdade, não há nada que seja de alguma forma mais escalável ou digno da empresa sobre copiar e colar 20 arquivos e, em seguida, fazer apenas alterações significativas em dois deles. A idéia é separar as preocupações, não dividi-las ao meio. Cruft e abstração sem sentido custarão mais do que não ter 95% de cobertura.
É realmente popular e muitas pessoas realmente gostam. Se isso não for motivo suficiente para, pelo menos, adivinhar e / ou avaliar a porcaria de qualquer tecnologia antes da adoção, aprenda um pouco de paranóia.