Testes Unitários
Começando a escrever testes no seu dia-a-dia
Alex Tercete
alex.matos@chemtech.com.br
27 de abril de 2011
Espera aí...
Você já falou disso!
O que mudou?
• Chemtech Coding Dojo
• Uso na prática
– SIMONS, ONS (Importação Automática)
– Viva 2.0, Coca-Cola (Aplicati...
Escrever código
Como desenvolvemos atualmente
Camada de
apresentação
(Web, UI)
Camada de
Serviço
Camada de
Lógica
Camada d...
Debug-Driven
Development
(DDD)
Uma nova forma de pensar
Camada X
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Camada Y
Escrever teste
...
Test-Driven
Development
(TDD)
Mas isso não é
trabalho dobrado?
Uma análise do tempo gasto no DDD
• “Clicar no botão”
– Levantar servidor de desenvolvimento
– Compilar páginas .aspx, .js...
Os benefícios do TDD
• Código desacoplado e com bom design
• Robustez
• Evita problemas de regressão
• Aumenta a confiança...
Por que ainda não
estou fazendo isso?
Escrever testes unitários é fácil
[Fact]
public void TesteDePotenciacao()
{
// Arrange
var calculadora = new Calculadora()...
O desafio é escrever
código testável
Escrever código testável é difícil
• Quebra de hábitos antigos
• Aprender nova forma de pensar/trabalhar
• Algumas tecnolo...
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 dese...
Tá, mas eu quero
ver um exemplo
disso na prática!
Um exemplo
• Ideias?!
Organizando seu Projeto
• Separar o projeto/pacote contendo os testes
– <NomeDoProjeto>
– <NomeDoProjeto>.Testes
• Acessan...
Test Doubles
• Dummy
– Nunca é usado
• Fake
– Implementação do objeto real, mas com “atalhos”
• Stubs
– Não fazem nada
• S...
Depurando os testes unitários
• GUI Runner
• Debug > Attach to Process...
• Rodar testes
Como começar?
O que você pode fazer
• Just Do It!
• Estime o tempo das suas tarefas levando em
conta os testes unitários
• Comece testan...
Vivemos na era da informação
Referências
• http://elegantcode.com/2008/05/20/get-started-
writing-testable-code/
• http://www.martinfowler.com/bliki/Te...
Dúvidas?
Upcoming SlideShare
Loading in …5
×

Testes Unitários: Começando a escrever testes no seu dia-a-dia

648 views

Published on

  • Be the first to comment

Testes Unitários: Começando a escrever testes no seu dia-a-dia

  1. 1. Testes Unitários Começando a escrever testes no seu dia-a-dia Alex Tercete alex.matos@chemtech.com.br 27 de abril de 2011
  2. 2. Espera aí... Você já falou disso!
  3. 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. 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
  5. 5. Debug-Driven Development (DDD)
  6. 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
  7. 7. Test-Driven Development (TDD)
  8. 8. Mas isso não é trabalho dobrado?
  9. 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. 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
  11. 11. Por que ainda não estou fazendo isso?
  12. 12. 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); }
  13. 13. O desafio é escrever código testável
  14. 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. 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. 16. Tá, mas eu quero ver um exemplo disso na prática!
  17. 17. Um exemplo • Ideias?!
  18. 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. 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. 20. Depurando os testes unitários • GUI Runner • Debug > Attach to Process... • Rodar testes
  21. 21. Como começar?
  22. 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
  23. 23. Vivemos na era da informação
  24. 24. 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/
  25. 25. Dúvidas?

×