quarta-feira, 5 de dezembro de 2007

TDD - Desenvolvimento Orientado a Testes

Quando ouvi a primeira vez sobre Test Driven Development achei imoral, o quão ridículo pode parecer fazer testes antes de desenvolver uma funcionalidade?

Bem, o negócio não é tão feio quanto parece, fazer TDD te ajuda em muita coisa.

Outro dia eu estava fazendo um Caso de Uso relacionado a uma loja virtual, onde deveria retornar vários valores de acordo com os produtos comprados.

Comecei fazendo o Teste:

Primeiro Passo: Gerei a classe de teste e criei somente a assinatura do método.
Segundo Passo: Fiz as simulações necessárias numa calculadora e amarrei no teste, de acordo com a entrada a saída deveria ser... Óbvio que o teste ainda não funcionava.
Terceiro Passo: Parti para a implementação, encontrei menos dificuldades do que imaginava, a lógica estava na minha cabeça, e quando imaginei ter terminado a funcionalidade, simplesmente rodei o teste.

Corrigindo os erros que encontrei no teste e corrigindo o próprio teste, terminei a funcionalidade num tempo muito próximo ao tempo que faríamos sem teste, e o melhor é que a funcionalidade já estava testada, nem precisei abrir a tela pra testar cada situação.

Confesso que existem alguma situações que o TDD não ajuda muito, como por exemplo, num método que somente chama outro método, nesses casos, eu prefiro varrer a classe após a implementação e fazer os testes que faltaram.

Abuse do artifício dos Mock Objects, e experimente o TDD, os seus DEBUGs vão ser menos constantes e você terá a sensação de Casos de Uso concluídos de verdade.

Vocês não imaginam a sensação que tive quando rodei minha classe de testes (haviam 18 simulações testadas) e a barrinha ficou verde.


ps. uso a primeira pessoa (encontrei, tive, Gerei, etc) mas tudo isso foi feito em dupla.