Hoje, no trabalho, desenvolvendo um método bem simples, resolvi tirar os "print screen" pra postar aqui e mostrar pros iniciantes em TDD que o assunto em bem próximo da nossa realidade.
Segue o exemplo abaixo:
Dada uma Collection de AtoNormativo* e um objeto do tipo AtoNormativo, façamos um método que retorne a Collection de AtoNormativo excluindo o objeto passado.
*AtoNormativo é uma classe e tem uma propriedade Long id.
1) Crio o método retiraNorma passando uma Collection
2) Crio o método testRetiraNorma, crio a Collection, adiciono 3 objetos do tipo AtoNormativo e chamo o método retiraNorma, passando um dos objetos inseridos, para ser retirado da Collection.
Perceba que após chamar o método, testo se a Collection foi retornada com 2 elementos somente, se um objeto que não deve ter sido removido, não foi removido, e se um objeto que deve ter sido removido, foi removido.
3) Rodei o teste e deu erro. É o que deve acontecer, já que o método ainda retorna Null.
Implemento o método.
4) Rodo o teste e tudo ok.
A barra verde no canto esquerdo superior da imagem é o sinal de sucesso.
Pronto.
Perceba que a sequência lógica se mantém, penso no que vou fazer, penso no que o método deve fazer, implemento e testo, porém, quando o teste é rodado, você não precisa mais rodar a aplicação, abrir uma determinada tela e executar um certa funcionalidade, o teste garante que, na situação que você pensou, o método irá funcionar.
Perceba que o teste pode ser alterado, podem ser inseridos situações em que o objeto passado não está dentre os objetos da Collection, e isso pode ser feito, o teste não é final, ele sempre pode evoluir.