![Page 1: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/1.jpg)
Testes Unitários
Começando a escrever testes no seu dia-a-dia
Alex [email protected]
27 de abril de 2011
![Page 2: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/2.jpg)
Espera aí...
Você já falou disso!
![Page 3: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/3.jpg)
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 (*)
![Page 4: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/4.jpg)
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? DEBUGNão
Comemorar!
Sim
![Page 5: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/5.jpg)
Debug-Driven Development
(DDD)
![Page 6: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/6.jpg)
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
![Page 7: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/7.jpg)
Test-Driven Development
(TDD)
![Page 8: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/8.jpg)
Mas isso não é trabalho dobrado?
![Page 9: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/9.jpg)
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
![Page 10: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/10.jpg)
Os benefícios do TDD
• Código desacoplado e com bom design• Robustez• Evita problemas de regressão• Aumenta a confiança do desenvolvedor
![Page 11: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/11.jpg)
Por que ainda não estou fazendo isso?
![Page 12: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/12.jpg)
Escrever testes unitários é fácil
[Fact]public void TesteDePotenciacao(){ // Arrange var calculadora = new Calculadora();
// Act var resultado = calculadora.Eleva(3, 4); // Assert Assert.Equal(81, resultado);}
![Page 13: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/13.jpg)
O desafio é escrever código testável
![Page 14: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/14.jpg)
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.
![Page 15: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/15.jpg)
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
![Page 16: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/16.jpg)
Tá, mas eu quero ver um exemplo disso na prática!
![Page 17: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/17.jpg)
Um exemplo
• Ideias?!
![Page 18: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/18.jpg)
Organizando seu Projeto
• Separar o projeto/pacote contendo os testes– <NomeDoProjeto>– <NomeDoProjeto>.Testes
• Acessando métodos internos– Properties/AssemblyInfo.cs
[assembly: InternalsVisibleTo("<NomeDoProjeto>.Testes")]
![Page 19: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/19.jpg)
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
![Page 20: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/20.jpg)
Depurando os testes unitários
• GUI Runner• Debug > Attach to Process...• Rodar testes
![Page 21: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/21.jpg)
Como começar?
![Page 22: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/22.jpg)
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
![Page 23: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/23.jpg)
Vivemos na era da informação
![Page 24: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/24.jpg)
Referências
• http://elegantcode.com/2008/05/20/get-started-writing-testable-code/
• http://www.martinfowler.com/bliki/TestDouble.html• http://
googletesting.blogspot.com/2008/11/clean-code-talks-unit-testing.html
• http://misko.hevery.com/attachments/Guide-Writing%20Testable%20Code.pdf
• http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-decided-to.html
• http://hashbucket.wordpress.com/2009/01/12/unit-testing-internal-methods/
![Page 25: Testes Unitários: Começando a escrever testes no seu dia-a-dia](https://reader035.vdocuments.site/reader035/viewer/2022062307/5579a7aad8b42ac1148b4bf0/html5/thumbnails/25.jpg)
Dúvidas?