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