32

Treinamento Testes Unitários - parte 1

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

Page 1: Treinamento Testes Unitários - parte 1
Page 2: Treinamento Testes Unitários - parte 1

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

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

Por que Testar?

Page 5: Treinamento Testes Unitários - parte 1

Por que Testar?

Page 6: Treinamento Testes Unitários - parte 1

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

Certo?

Page 8: Treinamento Testes Unitários - parte 1

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

Modelo em V

Page 10: Treinamento Testes Unitários - parte 1

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

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

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

Integração Contínua

Page 14: Treinamento Testes Unitários - parte 1

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

Test Driven Development (TDD)

Page 16: Treinamento Testes Unitários - parte 1

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

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

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

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

TestNG

•Exemplo prático:

Page 21: Treinamento Testes Unitários - parte 1

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

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

TestNG

Arquivo típico de beans do Spring

Page 24: Treinamento Testes Unitários - parte 1

Mocks

• Framework de mock para Java

• DSL Fluente

•mock

•when

•thenReturn

•doThrow

• Simples e Fácil

Page 25: Treinamento Testes Unitários - parte 1

Mocks

Exemplo prático

Page 26: Treinamento Testes Unitários - parte 1

Dúvidas?

Page 27: Treinamento Testes Unitários - parte 1

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

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

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

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

Twitter

Siga a ilegra no twitterhttp://www.twitter.com/ilegra

Page 32: Treinamento Testes Unitários - parte 1