O documento discute a importância de se escrever testes unitários para o desenvolvimento de software, comparando o desenvolvimento guiado a debug (DDD) com o desenvolvimento guiado a testes (TDD). Apesar de inicialmente difícil, escrever código testável traz benefícios como código mais robusto e menos bugs, e o autor fornece exemplos práticos de como começar a escrever testes unitários em C#.
3. O que mudou?
• Chemtech Coding Dojo
• Uso na prática
– SIMONS, ONS (Importação Automática)
– Viva 2.0, Coca-Cola (Aplicativo do Twitter)
– GERCAD, ONS (*)
4. Escrever código
Como desenvolvemos atualmente
Camada de
apresentação
(Web, UI)
Camada de
Serviço
Camada de
Lógica
Camada de
Acesso a Dados
“Clicar no botão”
Funcionou? DEBUG
Não
Comemorar!
Sim
6. Uma nova forma de pensar
Camada X
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Camada Y
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Camada Z
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
9. Uma análise do tempo gasto no DDD
• “Clicar no botão”
– Levantar servidor de desenvolvimento
– Compilar páginas .aspx, .jsf, etc.
– Acessar manualmente a página e realizar os passos
para execução da funcionalidade
– Executar query no banco
• Debug
– Adicionar/remover breakpoints e watches
– Depurar o código linha a linha
• Paciência
• Atenção
10. Os benefícios do TDD
• Código desacoplado e com bom design
• Robustez
• Evita problemas de regressão
• Aumenta a confiança do desenvolvedor
14. Escrever código testável é difícil
• Quebra de hábitos antigos
• Aprender nova forma de pensar/trabalhar
• Algumas tecnologias são naturalmente mais
difíceis de testar
– Interface Gráfica
– Stored Procedures
– Componentes de terceiros
– etc.
15. A mudança não é instantânea
• No início você vai escrever código “mais ou
menos” testável
• Você vai errar
• Você vai desejar ter feito as coisas de forma
diferente
• Você vai evoluir
• Você não vai mais conseguir desenvolver de
outra maneira
16. Tá, mas eu quero
ver um exemplo
disso na prática!
18. Organizando seu Projeto
• Separar o projeto/pacote contendo os testes
– <NomeDoProjeto>
– <NomeDoProjeto>.Testes
• Acessando métodos internos
– Properties/AssemblyInfo.cs
[assembly: InternalsVisibleTo("<NomeDoProjeto>.Testes")]
19. Test Doubles
• Dummy
– Nunca é usado
• Fake
– Implementação do objeto real, mas com “atalhos”
• Stubs
– Não fazem nada
• Spies
– Stubs que registram informações sobre as chamadas
• Mocks
– Imitações do objeto real, para chamadas específicas
20. Depurando os testes unitários
• GUI Runner
• Debug > Attach to Process...
• Rodar testes
22. O que você pode fazer
• Just Do It!
• Estime o tempo das suas tarefas levando em
conta os testes unitários
• Comece testando o que for mais fácil
• Dê prioridade à lógica principal da aplicação
• Mostre aos seus colegas os benefícios que os
testes unitários podem trazer
• Pesquise, estude e peça ajuda