O TDD, ou Desenvolvimento Guiado por Testes, tem sido tópico de muitas discussões desde sua criação. Resultando em códigos mais sucintos e confiáveis, não é de se impressionar que venha adquirindo cada vez mais adeptos.

Basicamente, o TDD consiste em escrever os testes do software antes do próprio software. Para cada parte desenvolvida, antes se constrói os testes que validarão se ela funciona como deveria, então o software é construído de forma a satisfazer os testes em questão. Nada a mais. Dessa forma, a cada nova parte desenvolvida você pode rapidamente testar se ela comporta-se conforme o esperado e se outra deixou de funcionar.

TDD consiste em escrever os testes do software antes do próprio software

Ter todos os testes prontos para rápida execução também ajuda muito na hora de refatorar o código. Qualquer parte do código em que se perceba que poderia ser feito de forma melhor, mais simples ou que execute mais rapidamente pode ser alterada sem medo de que deixe de funcionar, já que com todos os testes prontos, basta executá-los para verificar se o refatoramento foi feito de forma adequada.

Quando terminamos o desenvolvimento, os testes já estão prontos e temos confiança no código desenvolvido, sabendo que dificilmente haverá falhas nele.

Unindo tudo isso você tem códigos mais confiáveis, pois tem certeza que foram testados; mais otimizados, pois sabe que foram feitos da melhor forma para atender a necessidade; e mantendo os testes sabe-se que será mais fácil dar manutenção no futuro.

Abaixo temos um exemplo simples de utilização do TDD.

/**
* Método de teste para a classe soma da classe SomaValores.
*/public static void testeSoma() {
int retorno;//testa com um valor positivo e negativo
retorno = SomaValores.soma(2, -3);
assertEquals(“Valor esperado: -1, valor retornado: “+retorno, -1, retorno);//TODO: testa com um valor negativo e positivo
retorno = SomaValores.soma(-5, 9);
assertEquals(“Valor esperado: 4, valor retornado: “+retorno, 4, retorno);//TODO: testa dois valores positivos
retorno = SomaValores.soma(3, 5);
assertEquals(“Valor esperado: 8, valor retornado: “+retorno, 8, retorno);
public class SomaValores {
/**
* Método que retorna a soma dos valores passados por parâmetro.
*/public static int soma(int i, int j) {
return i+j;
}
}

Autor: Lucas Garibaldi Alves
Fonte
http://www.devmedia.com.br/test-driven-development-tdd/10025