Como já escrevi anteriormente, fiquei surpreso em saber que os testes devem acompanhar o projeto desde o início e não somente no final de tudo.
O teste ocorre em diversos níveis, o primeiro nível são os testes unitários, que são escritos pelos desenvolvedores. O teste unitário avalia se uma pequena parte da funcionalidade está funcionando como esperado. Você não pode considerar uma tarefa concluída a menos que haja um conjunto abrangente de testes unitários pela ela. Uma implicação disso é que você não pode integrar a funcionalidade até que todos os seus casos de testes unitários tenham sido escritos e passados.
Na verdade, primeiramente deve ser escritos os testes unitários e em seguida programar o recurso para fazer o teste passar: teste, código, teste, código e assim por diante. Diversas são vantagens quando testamos primeiro:
- Os testes fornecem uma definição ou documentação do comportamento desejado.
- Você sabe quando tem a funcionalidade total e corretamente implementada. Quando o teste é aprovado, você pode dizer com certeza: “Pronto… o próximo!”.
Muito código é distribuído sem ser totalmente testado com a idéia de que você terá relatório de bugs informando sobre aquilo que realmente aconteceu. Entretanto, esse é um procedimento caro e instável. Parte do motivo é que é um problema escrever o código de teste após um bom desempenho para escrever o código de solução do problema. Esse é outro motivo para adotar a abordagem de escrever o teste primeiro. O teste se torna parte da solução.
Você tem de especificar o comportamento de alguma maneira, seja em papel ou na sua cabeça e, portanto escreva-o usando a sintaxe da linguagem na qual você está programando. Da mesma forma, trabalhar dessa maneira significa que você nunca terá de passar muito tempo escrevendo apenas código de teste. Você escreve um pouco de código de teste e em seguida escreve um pouco de código de produção. Você alterna essas duas atividades até a tarefa estar concluída.
O que você deve testar? A resposta mais simples é tudo que possa quebrar, ou seja, tudo que é primordial para o sistema funcionar.
Por falar em executar os testes, quando e com que freqüência você deve executá-los? Você deve executar com a freqüência que for possível, isso quer dizer que os testes devem ser rápidos e leves. O ideal é que você os execute, sempre que programar alguma funcionalidade por completa. No mínimo, você deve executá-los antes e depois de fazer alguma alteração. A execução antes das alterações lhe dá a confiança de ter uma plataforma estável para trabalhar, e a execução após as alterações prova que você não quebrou nada.

