Testes Unitários Diego Pacheco Arquiteto de Software http://diego-pacheco.blogspot.com http://www.twitter.com/diego_pachec...
Agenda <ul><li>Por que Testar ? </li></ul><ul><li>Visão sobre os Testadores (Certo e Errado) </li></ul><ul><li>Modelo em V...
Por que Testar?
Por que Testar?
Por que Testar? <ul><li>Saber se o que foi feito funciona; </li></ul><ul><li>Diminuir o número de defeitos e falhas; </li>...
Certo?
Errado !!! <ul><li>Testadores não são a primeira barreira para achar problemas, são a ultíma!; </li></ul><ul><li>Se o proj...
Modelo em V
Defeitos e Falhas <ul><li>Defeito : É um problema ou não conformidade sobre algo que foi especificado formalmente e deveri...
Testes Unitários <ul><li>Boa Prática;  </li></ul><ul><li>Escritos pelo Desenvolvedor; </li></ul><ul><li>Testam apenas a un...
Integração Contínua <ul><li>Prática do XP; </li></ul><ul><li>Automação do Build; </li></ul><ul><li>Deploy; </li></ul><ul><...
Integração Contínua
Test  Driven Development (TDD) <ul><li>Técnica de Desenvolvimento com foco em Testes; </li></ul><ul><li>Relacionado o Test...
Test  Driven Development (TDD)
Técnicas para Testes <ul><li>Equivalência de Classes : Tem como objetivo reduzir o número de casos de testes através de de...
Escrevendo código testável <ul><li>Boas Práticas: </li></ul><ul><li>Utilize interfaces nas classes de negócio e processame...
TestNG <ul><li>Framework de teste unitário para Java; </li></ul><ul><li>Utiliza anotações; </li></ul><ul><li>Integração co...
TestNG <ul><li>Principais  Anotações: </li></ul><ul><ul><li>@Test : Marca uma classe ou um método como sendo parte de um t...
TestNG <ul><li>Exemplo prático: </li></ul>
TestNG <ul><li>Boas práticas: </li></ul><ul><ul><li>Utilizar um método por cenário/tipo de teste; </li></ul></ul><ul><ul><...
TestNG <ul><li>Integração com Spring Framework: </li></ul><ul><ul><li>Criar classe de testes que estenda a classe  Abstrac...
TestNG Arquivo típico de beans do Spring
Mocks <ul><li>Framework de mock para Java </li></ul><ul><li>DSL Fluente </li></ul><ul><ul><li>mock </li></ul></ul><ul><ul>...
Mocks Exemplo prático
Dúvidas?
Hands on: Exercicios Todos os exercicios deverão ser feitos utilizando integração contínua(Hudson) , Controle de versão(SV...
Hands on: Exercicios <ul><li>Instalar o Eclipse do Instrutor; </li></ul><ul><li>Instalar e configurar o Maven 2 ; </li></u...
Hands on: Exercicios <ul><li>Testes que devem ser criados: </li></ul><ul><li>Testes unitários para o serviço de vendas. </...
Referências <ul><li>Livros: </li></ul><ul><ul><li>Prentice Hall PTR 2005 -  Agile Java Crafting Code with Test-Driven Deve...
Twitter Siga a  i legra no twitter http://www.twitter.com/ilegra
 
Upcoming SlideShare
Loading in...5
×

Treinamento Testes Unitários - parte 1

3,292

Published on

Treinamento de Testes Unitários, Integração Contínua com Hudson, Maven 2, Spring, Mockito e TDD na ilegra em 2009.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,292
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
147
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Treinamento Testes Unitários - parte 1

  1. 2. Testes Unitários Diego Pacheco Arquiteto de Software http://diego-pacheco.blogspot.com http://www.twitter.com/diego_pacheco Setembro/2009 Para Desenvolvedores
  2. 3. Agenda <ul><li>Por que Testar ? </li></ul><ul><li>Visão sobre os Testadores (Certo e Errado) </li></ul><ul><li>Modelo em V </li></ul><ul><li>Defeitos e Falhas </li></ul><ul><li>Testes Unitários </li></ul><ul><li>Integração Contínua </li></ul><ul><li>Test Driven Development (TDD) </li></ul><ul><li>Técnicas para testes </li></ul><ul><li>Escrevendo código testável </li></ul><ul><li>TestNG e Integração com Spring </li></ul><ul><li>Mocks com Mockito </li></ul><ul><li>Hands on: Exercicios </li></ul>
  3. 4. Por que Testar?
  4. 5. Por que Testar?
  5. 6. Por que Testar? <ul><li>Saber se o que foi feito funciona; </li></ul><ul><li>Diminuir o número de defeitos e falhas; </li></ul><ul><li>Diminuir Custos; </li></ul><ul><li>Mitigar Riscos; </li></ul><ul><li>Melhorar a Qualidade do produto. </li></ul>
  6. 7. Certo?
  7. 8. Errado !!! <ul><li>Testadores não são a primeira barreira para achar problemas, são a ultíma!; </li></ul><ul><li>Se o projeto falhar todos falham, estamos todos no mesmo barco; </li></ul><ul><li>Quanto mais bugs forem achados pelos testadores, melhor!; </li></ul><ul><li>O Desenvolvedor é um testador também; </li></ul><ul><li>O Desenvolvedor faz testes unitários para testar o próprio código. </li></ul>
  8. 9. Modelo em V
  9. 10. Defeitos e Falhas <ul><li>Defeito : É um problema ou não conformidade sobre algo que foi especificado formalmente e deveria funcionar da maneira a qual foi descrita. </li></ul><ul><li>Falha: É um problema que não foi formalmente especificado, muitas vezes pode indicar um erro no projeto do produto. </li></ul>
  10. 11. Testes Unitários <ul><li>Boa Prática; </li></ul><ul><li>Escritos pelo Desenvolvedor; </li></ul><ul><li>Testam apenas a unidade (código core); </li></ul><ul><li>Possibilitam testes de regressão; </li></ul><ul><li>Possibilitam realizar refactoring, sem medo!; </li></ul><ul><li>Rodam diariamente em servidor de integração contínua; </li></ul><ul><li>Utilizados com metodologia (TDD); </li></ul><ul><li>Técnicas para testar o código; </li></ul><ul><li>Frameworks em Java. </li></ul>
  11. 12. Integração Contínua <ul><li>Prática do XP; </li></ul><ul><li>Automação do Build; </li></ul><ul><li>Deploy; </li></ul><ul><li>Testes; </li></ul><ul><li>Commits Frequentes; </li></ul><ul><li>Fail Fast; </li></ul><ul><li>Facilidades para troca de versão; </li></ul><ul><li>Maior Qualidade. </li></ul>
  12. 13. Integração Contínua
  13. 14. Test Driven Development (TDD) <ul><li>Técnica de Desenvolvimento com foco em Testes; </li></ul><ul><li>Relacionado o Test First do XP; </li></ul><ul><li>Utiliza testes unitários. </li></ul>
  14. 15. Test Driven Development (TDD)
  15. 16. Técnicas para Testes <ul><li>Equivalência de Classes : Tem como objetivo reduzir o número de casos de testes através de dedução lógica. </li></ul><ul><li>Valor Limite : Também tem como objetivo reduzir o número de casos de testes e é uma evolução da técnica de equivalencia de classes. </li></ul><ul><li>Testes por Tabelas de Decisão : Serve para montar casos de testes em cenário de muitas regras complexas. </li></ul><ul><li>Testes Exploratórios : Não eliminam os testes planejados, mas são muito úteis, estes testes são realizados a partir da nossa experiência. </li></ul>
  16. 17. Escrevendo código testável <ul><li>Boas Práticas: </li></ul><ul><li>Utilize interfaces nas classes de negócio e processamento; </li></ul><ul><li>Evite ao máximo utilizar static e final; </li></ul><ul><li>Não instancie objetos dentro de classes de negócio, utilize injeção de dependências sempre; </li></ul><ul><li>Evite criar rotinas desnecessárias, procure sempre utilizar código pronto de frameworks de mercado; </li></ul><ul><li>Utilize um bom design, não tenha responsabilidade de mais em uma classe. EX.: Tela fazer acesso a dados; </li></ul><ul><li>Utilize mocks para isolar o seu teste de outros componentes e serviços. </li></ul>
  17. 18. TestNG <ul><li>Framework de teste unitário para Java; </li></ul><ul><li>Utiliza anotações; </li></ul><ul><li>Integração com Eclipse e Maven 2; </li></ul><ul><li>Grupos de Testes ; </li></ul><ul><li>Possui Integração com Spring Framework; </li></ul><ul><li>Relatório de resultado em HTML; </li></ul><ul><li>Fácil de usar e com boa documentação. </li></ul>
  18. 19. TestNG <ul><li>Principais Anotações: </li></ul><ul><ul><li>@Test : Marca uma classe ou um método como sendo parte de um teste. </li></ul></ul><ul><ul><li>@BeforeClass : Executa um método antes da classe iniciar. </li></ul></ul><ul><ul><li>@AfterClass : Executa um método depois da classe iniciar. </li></ul></ul><ul><ul><li>@BeforeMethod : Executa antes de qualquer método de testes. </li></ul></ul><ul><ul><li>@AfterMethod : Executa depois de qualquer método de testes. </li></ul></ul><ul><ul><li>@DataProvider : Define um método que será fonte de dados para outro método. </li></ul></ul>
  19. 20. TestNG <ul><li>Exemplo prático: </li></ul>
  20. 21. TestNG <ul><li>Boas práticas: </li></ul><ul><ul><li>Utilizar um método por cenário/tipo de teste; </li></ul></ul><ul><ul><li>Utilizar nomes significarivos nos nomes dos métodos de teste. Ex.: testValorMaiorInvalidoRegra2 () ; </li></ul></ul><ul><ul><li>Criar suites de testes organizados por requisitos/Casos de uso ou release do produto; </li></ul></ul><ul><ul><li>Utilizar técnicas de testes; </li></ul></ul><ul><ul><li>Testar cenários de exceção e forçar errors. </li></ul></ul>
  21. 22. TestNG <ul><li>Integração com Spring Framework: </li></ul><ul><ul><li>Criar classe de testes que estenda a classe AbstractTestNGSpringContextTests do Spring Framework . </li></ul></ul><ul><ul><li>Adicionar a anotação @ContextConfiguration( locations={ &quot;/spring-test-beans.xml&quot; } )   e apontar para onde está o arquivo de configurações do Spring Framework. </li></ul></ul><ul><ul><li>Injetar serviços com anotações. Ex.: @Autowired e @Test( enabled=false ) para que o método setter de injeção não seja testado. </li></ul></ul>
  22. 23. TestNG Arquivo típico de beans do Spring
  23. 24. Mocks <ul><li>Framework de mock para Java </li></ul><ul><li>DSL Fluente </li></ul><ul><ul><li>mock </li></ul></ul><ul><ul><li>when </li></ul></ul><ul><ul><li>thenReturn </li></ul></ul><ul><ul><li>doThrow </li></ul></ul><ul><li>Simples e Fácil </li></ul>
  24. 25. Mocks Exemplo prático
  25. 26. Dúvidas?
  26. 27. Hands on: Exercicios Todos os exercicios deverão ser feitos utilizando integração contínua(Hudson) , Controle de versão(SVN) e o método TDD. O Commit só deverá ser realizado após os testes construído e executado sem nenhum erro.
  27. 28. Hands on: Exercicios <ul><li>Instalar o Eclipse do Instrutor; </li></ul><ul><li>Instalar e configurar o Maven 2 ; </li></ul><ul><li>Fazer checkout do repositório da máquina do instrutor; </li></ul><ul><li>Criar Testes unitários utilizando só TestNG; </li></ul><ul><li>Modificar os testes para adicionar suporte ao Spring; </li></ul><ul><li>Modificar os testes para adicionar suporte ao Mockito. </li></ul>
  28. 29. Hands on: Exercicios <ul><li>Testes que devem ser criados: </li></ul><ul><li>Testes unitários para o serviço de vendas. </li></ul><ul><ul><li>Testar Parâmetros inválidos e nulos. </li></ul></ul><ul><ul><li>Testar se o comissionamento (RN002) e a baixa de estoque (RN003) estão corretos. </li></ul></ul><ul><ul><li>Testar o método estornar() </li></ul></ul>Regras de Negocio
  29. 30. Referências <ul><li>Livros: </li></ul><ul><ul><li>Prentice Hall PTR 2005 - Agile Java Crafting Code with Test-Driven Development - Jeff Langr </li></ul></ul><ul><ul><li>Addison Wesley 2006 - Agility and Discipline made easy - Practices from OpenUP and RUP - Per Krol </li></ul></ul><ul><ul><li>John Wiley & Sons 2007 - Pragmatic Software Testing: Becoming an Effective and Efficient Test Professional - Rex Black </li></ul></ul><ul><ul><li>Visual Books 2008 – Testes Funcionais de Software – Leonardo Molinari </li></ul></ul><ul><ul><li>Manning 2007 - Test Driven TDD and Acceptance TDD for Java Developers - Lasse K oskela </li></ul></ul><ul><ul><li>Addison Wesley 2002 - Test-Driven Development By Example - Kent Beck </li></ul></ul><ul><li>Sites/Blogs: </li></ul><ul><ul><li>http://diego-pacheco.blogspot.com/search/label/testes </li></ul></ul><ul><ul><li>http://www.testexpert.com.br/ </li></ul></ul><ul><ul><li>http://diariodaqualidade.blogspot.com/ </li></ul></ul><ul><ul><li>https://hudson.dev.java.net/ </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Test-driven_development </li></ul></ul><ul><ul><li>http://www.agiledata.org/essays/tdd.html </li></ul></ul><ul><ul><li>http://testng.org/doc/index.html </li></ul></ul><ul><ul><li>http://googletesting.blogspot.com/ </li></ul></ul><ul><ul><li>http://testobsessed.com/ </li></ul></ul><ul><ul><li>http://www.wthreex.com/rup/process/modguide/md_untst.htm </li></ul></ul><ul><ul><li>http://www.infoq.com/testing/ </li></ul></ul><ul><ul><li>http://mockito.org/ </li></ul></ul>
  30. 31. Twitter Siga a i legra no twitter http://www.twitter.com/ilegra
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×