Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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

  • 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?

×