Crown:
Como ainda nao me dediquei totalmente ao assunto posso estar falando besteira: Em metodologias ageis aquela velha historia dq “o desenvovedor nao pode testar o seu proprio codigo” vira mito?
Mais ou menos.
Em agil, o codigo é de todos. Então que vc cria uma classe e cria o teste para ela, vc não está criando o teste para a “sua” classe.
Porque a classe não é sua e o teste não é seu, qq outro pode a qualquer momento incrementar qq um dos dois. E todos são responsáveis por deixar todos os testes verdes.
O conceito de que o codigo não é de quem o escreveu e sim de toda a equipa, passada e futura estabelece um novo paradigma onde essa historia não se aplica.
TDD não trata de escrever código que verifica se outro codigo funciona. Isso seriam testes unitários, integração, etc…
TDD trata de vc escrever exemplos executáveis das features do seu sistema. usa-se um framework de testes porque é prático mas o conceito é diferente. Quando vc usa TDD vc cria um monte de classes junit. Isto não significa que o seu codigo está testado porque o TDD só evolui até ao ponto em que funciona. Não existe no TDD a clausula que diz “Se está funcionando adicione outro teste até que quebre”.
O TDD funciona num ciclo fechado e limitativo. É por isto que TDD não permite que vc alcance um modelo robusto e flexivel a menos que vc crie testes que são muito mais genericos que necessário ( o que viola uma das direcivas do TDD).
É preciso diferenciar TDD daquilo que se faz em XP, por exemplo, chamado Test First. O Test First é a primeira diretiva do TDD, mas é nas segunda e terceira que está implicita um mecanismo de limitação que não existe em XP, por exemplo.
TDD não é sobre desenvolver testes, é sobre desenvolver a aplicação usando pequenos mini-programas que são executados na forma de testes.