Upload
diego-pacheco
View
3.263
Download
5
Embed Size (px)
DESCRIPTION
Treinamento de Testes Unitários, Integração Contínua com Hudson, Maven 2, Spring, Mockito e TDD na ilegra em 2009.
Citation preview
Testes Unitários
Diego Pacheco
Arquiteto de Softwarehttp://diego-pacheco.blogspot.com
http://www.twitter.com/diego_pacheco
Setembro/2009
Para Desenvolvedores
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
Por que Testar?
Por que Testar?
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.
Certo?
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.
Modelo em V
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.
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.
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.
Integração Contínua
Test Driven Development (TDD)
• Técnica de Desenvolvimento com foco em Testes;
• Relacionado o Test First do XP;
• Utiliza testes unitários.
Test Driven Development (TDD)
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.
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.
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.
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.
TestNG
•Exemplo prático:
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.
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.
TestNG
Arquivo típico de beans do Spring
Mocks
• Framework de mock para Java
• DSL Fluente
•mock
•when
•thenReturn
•doThrow
• Simples e Fácil
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(SVN) e o método TDD. O Commit só deverá ser realizado após os testes construído e executado sem nenhum erro.
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.
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
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/
Siga a ilegra no twitterhttp://www.twitter.com/ilegra