Testes de Unidade, por que vocêdeve começar a fazer?
Renan Siravegna @RenanSiravegna
@RenanSiravegnahttp://renansiravegna.wordpress.com/
Vocês testam o seu código?
Ciclo do desenvolvimento
Codificação FinalizaçãoTestes
2 mins 2 mins 1 min
Tempo total: 5 minutos(E isto é apenas uma suposição...)
Ciclo do desenvolvimento(de verdade)
Tempo total: 21 Minutos
Codificação FinalizaçãoTestes
2 mins 2 mins 1 min
Repetição (5 vezes)
E se você testasse todas as funcionalidades que seu código pode ter afetado?
Pior ainda.. E se você testasse o seu sistema inteiro?
Levaria dias? Semanas? Meses?
Testar manualmente demora!!
Existe solução?
Automatizar tudo!!Criar testes de unidade!!
O que é teste de unidade?
Um pedaço de código que irá chamar outro pedaço de código e irá verificar algumas suposições. Caso as suposições sejam erradas, o teste irá falhar. Unidade é um único e determinado comportamento.
Escrever código que testa código
Como?
Codificação FinalizaçãoEscrita de testes
2 mins 5 min 1 min
Tempo dos testes: 16 minutosRepetição (5 vezes)
Testes
5 ms
Outros benefícios
• Meu sistema funciona!!!• Testes de Regressão• Não tenho medo de alterar meu código• No final das contas, sai mais barato• É mais fácil de encontrar um bug no código• Você consegue ver melhor como seu código será usado• Muito mais divertido!• Melhora a qualidade do código
Qualidade de código com testes de unidade
Problemas
• Falta de conhecimento de Orientação a Objetos• Não pensar corretamente nos cenários• Fica chato se você não faz da forma correta
TDD
Começar testando (antes mesmo de existir o código de
produção)
Como assim?
Benefícios
• Foco no objetivo• Código nasce testado• Sem soluções complexas• Código limpo, mais coeso e menos desacoplado• Maior cobertura de código• Satisfação de ver seu sistema funcionando de ponta a ponta
Mas... Não é a mesma coisa que escrever os testes
depois???
Problemas
• Aprendizado• Mudança de cultura• Exige prática• Refatoração
Refatoração
É uma técnica disciplinada para reestruturar um corpo existente de código, alterando a sua estrutura interna sem alterar seu comportamento externo.
E o que eu ganho com isso?
• Comentários no código se tornam desnecessários• Código pode ser facilmente entendido por todos• Fácil de testar• Fácil de compreender• Extensibilidade• Melhor leitura e escrita
Até quando eu devo testar?
• Desencane de cobrir 100% o seu código• Teste até onde os testes de unidade são necessários• Teste somente o que é relevante
O que não testar
• Getters• Setters• Classes da linguagem• Trechos simples demais• Integração entre partes do sistema (falando em testes de unidade)• Quando você sabe que o teste vai passar antes de implementar
Leituras recomendadas