O ponto é que não são os testes o grande milagre, mas como o desenvolvimento orientado a testes funciona.
Teste unitário, testam uma classe só, seguindo uma necessidade que você têm para ela.
Por exemplo: Eu tenho que criar um classe que faz soma e não pode aceitar numero negativos.
Eu vou lá, escrevo meu test, que no caso estou usando JUnit, mas poderia ser um main como já citaram aqui. O JUnit é um framework que te ajuda a fazer teste e só.
public void testSomaNaoAceitaNegativo() {
MeuSomadorMaster somador = new MeuSomadorMaster();
try {
somador.soma(3, -1);
fail("Deveria lançar exception com possitivo, negativo);
} catch (Exception e) {}
try {
somador.soma(-3, 1);
fail("Deveria lançar exception com negativo, possitivo);
} catch (Exception e) {}
try {
somador.soma(-3, -1);
fail("Deveria lançar exception com negativo, negativo);
} catch (Exception e) {}
assertEquals(4, somador.soma(3, 1));
}
É um exemplo simples, e assim como foi um exemplo simples foi super simples de fazer o teste.
Eu escrevi esse teste antes de implementar, e já tenho na minha cabeça como vou implementar pois fui pensando nisso enquanto escrevi o teste.
O que eu garanto com isso? Que vou fazer certo? Nesse caso nem isso, pois é bem simples e com certeza eu ia fazer correto. Mas eu já pensei na pratica como isso será utilizado e tenho certeza que amanha não vai aparecer um mané, que precisando que essa classe some negativos, mude o comportamento dela. Na qual todo o resto do sistema está baseado.
Testes unitários evitam 100% os Bugs? NÃO! E NINGUÉM ESTA FALANDO ISSO! Mas eles evitam que os bugs que você já pensou em evitar ou que já foram descobertos voltem a acontecer.
E se você escrever os testes antes do desenvolvimento, você vai ter uma baita ajuda para pensar na maneira mais simples de implementar algo. Quando você implementa algo sem nem saber como vai utilizado na real, você acaba complicando demais.
Abram a cabeça, experimentem, no inicio é complicado você demora muito para ter eficiência, mas depois que você aprende, você começa a programar melhor, mais rápido, mais simples e mais seguro.
Isso é um fato, mais do que documentado e vivido no mundo real.
Agora, não é só teste unitário que você tem que ter os outros testes continuam sendo necessário, mas acabam ficando mais simples e mais baratos.
Agora, existe sim o mundo dos sem testes, mas para esse mundo que até funciona. Se você usar testes, o seu design seria mais simples, melhor entendido por todos e mais barato (os problemas não voltariam a acontecer pq uma pessoa mudou uma classe de uma maneira que não deveria).
Fazer testes unitários no inicio, quando ainda não falta experiência e conhecimento, é dificil e trabalhoso. Depois acaba sendo muito mais rapido programar com testes do que sem testes. Vira uma ferramenta que te ajuda a tomar decisões de design, te ajuda a documentar o funcionamento de uma classe, te ajuda a entender o funcionamento de um framework que você achou na internet e tem testes, melhora a colaboração da equipe e a qualidade do software.
Por favor, comprem um livro de alguém reconhecido sobre TDD e desenvolvimento orientado a testes e leiam de cabeça aberta. Façam uma experiência. E parem de justificar a cabeça dura. É um fato que está sendo vivido pelas empresas e pessoas que geram software mais barato e melhor.
Utilizar um framework sem testes unitário, é acreditar muito na competência de uma pessoa, o problema é um bom framework deve ter um ambiente alltamente colaborativo, e ser altamente colaborativo em um ambiente aonde os testes são manuais é muito caro, além de ser chato, e quando se trabalha de graça as pessoas só querem fazer o que é legal.
Então, mesmo o framework sendo bom e tal, o fato de não ter testes unitário é um risco para a continuidade do framework, quando o atual core encher o saco e partir para outra. Além de ser um trabalho ter que testar (você não vai colocar um framework novo em produção sem testar né) o framework na mão.
Com testes unitário, você pode ir lá e ler se os testes do cara são suficiente para você ou não, pq usar só testes também não diz nada, têm que usar e usar bem.