Vous êtes sur la page 1sur 28

Testes de Unidade com JUnit

Criar Estrutura da Unidade a ser Testada


Apenas defina as operaes.

Criar Classe de Teste para a Unidade

Criar Classe de Teste para a Unidade

Criar Classe de Teste para a Unidade

@Test => annotation que indica que um mtodo de teste.

Criar Casos de Teste para os Mtodos

@Test => indica que um mtodo de teste. assertEquals para double: assertEquals(valorEsperado, valorObtido, precisao)

Executar Testes

Boto direito na classe ContaTest e Executar Arquivo

Vermelho: Falha

Resultados

Explicao da falha e onde ocorreu

Implementando o Construtor e getSaldo

Executando novamente o teste

Verde em testConta: ok

Ignorando testes

@Ignore => annotation que indica este teste no dever ser executado

Ignorando Testes

Teste - Depsito

Executando a bateria de testes

Implementando o novo mtodo

Executando a bateria de testes

Adicionando o Cenrio de Saque

Executando os Testes

Implementando o Saque

Executando os testes

Tratando Excees

Crie uma nova classe para a exceo a ser arremessada em Conta.

10

Tratando Excees

Modificando o teste saque normal

fail: sinaliza que o caso de teste falhou

11

Existem mais cenrios para o saque?

Executando os Testes

12

Adicionando a regra de saldo insuficiente

Executando os Testes

13

Existem mais cenrios para o saque?

Executando os Testes

14

Adicionando regra valor limite de saque

Executando os Testes

15

Podemos reestruturar algo na unidade testada?


ANTES

Podemos reestruturar algo na unidade testada?


DEPOIS

16

Executando os Testes

Podemos reestruturar algo na classe de Teste?

Fatorando cdigo comum dos testes

17

Executando os Testes

JUnit

Preparao e Finalizao

O mtodo SetUpClass() chamado no incio da execuo dos testes de uma classe O mtodo TearDownClass() chamado aps a execuo de todos os testes de uma classe O mtodo setUp() chamado antes da execuo de cada teste de uma classe. O mtodo tearDown() chamado depois da execuo de cada teste de uma classe. Estes mtodos podem ser sobrescritos pelo programador para preparar o ambiente antes da execuo dos testes Exemplos: criar uma conexo com um banco de dados, abrir um arquivo, carregar um conjunto de informaes, ...

18

JUnit

JUnit

Execuo de uma classe de testes:

setUpClass (mtodo de inicializao no obrigatrio)

setUp (mtodo de inicializao no obrigatrio). testXXX1 tearDown (mtodo de finalizao do teste no obrigatrio). setUp testXXX2 tearDown ... (setUp, testXXXn, tearDown) para cada mtodo @Test

tearDownClass

MUITO IMPORTANTE:

Escreva os testes de modo que cada testXXX seja INDEPENDENTE da ordem de execuo do conjunto de mtodos textXXX testes definidos na classe.

19

JUnit - setUp

Note que o teste testDepositar deixou de criar o objeto da classe Conta como na implementao anterior

JUnit

Assertivas

assertEquals (valorEsperado, valorAtual); assertEquals (doubleEsperado, doubleAtual, tolerncia); (doubleEsperado doubleAtual assertTrue (expresso booleana); assertFalse (expresso booleana); assertNull (objeto); assertNotNull (objeto); assertSame (objeto1, objeto2); assertNotSame(objeto1, assertNotSame(objeto1 objeto2);

Sinalizao para o JUnit de que houve falha:

fail();

20

Test Suites

Classes de teste podem ser agrupadas em Test Suites. Permitem a execuo de um conjunto de classes de teste de uma s vez. Test Suites podem ser agrupadas em outros Test Suites e assim sucessivamente. TestSuite anlogo a um diretrio. TestCase anlogo a um arquivo.

Test Suites

21

Referncias

Tutorial Netbeans e Junit

http://netbeans.org/kb/docs/java/junit-intro.html#Exercise_30

www.junit.org

Test Driven Development - TDD


A abordagem que voc acabou de ver no tutorial chamada de TDD (Test Driven Development). Primeiro especificamos o que vai ser implementado na forma de testes. (caixa-preta) d t t ( i t ) Rodamos os testes para certificar que h falha. Implementamos a unidade (mtodos especficos). Rodamos os testes at conseguir uma barra verde. Tem mais testes a serem feitos? (caixa-branca) O cdigo da minha unidade precisa de alguma reestruturao? O cdigo dos meus testes p g precisa de alguma reestruturao? g

22

Vantagens

Desenvolvedor obtm feedback de cada passo efetuado. Base de testes vai sendo construdo passo a passo passo. Com o tempo, milhares de testes estaro disposio resultando em:

Grande reduo de tempo para identificao de erros. Grande reduo de tempo para correo de erros. Menor esforo de testes de sistema e correo de falhas (menor nmero de falhas so encontradas). ( d f lh t d ) Adeus s longas sesses de depurao.

Quanto mais cedo se acha um erro, mais barata ser a sua correo.

Desculpas Comuns para no Testar

A construo de casos de teste consome muito tempo


Se comparada a execuo de nenhum teste, verdade! Entretanto, isto uma iluso, pois falhas detectadas em um escopo maior (teste de sistema) acabam consumindo um tempo ainda maior de depurao (alm do tempo de todos os envolvidos testadores, usurios, etc).

Design a little - Test a little Code a little

a little = alguns minutos / horas.

A execuo dos casos de teste consome muito tempo


Testes devem ser construdos para rodar muito rapidamente. Testes podem ser executados seletivamente.

23

O que devo testar?


JUnit facilita bastante a criao e execuo de testes, mas elaborar bons testes exige mais

O que testar? Com saber se testes esto completos / corretos? Mtodos triviais (get/set) no precisam ser testados E se houver uma rotina de validao no mtodo set? Escreva testes curtos (quebre testes maiores) Use assertNotNull() (reduz drasticamente erro de NullPointerException difceis de encontrar)

Teste tudo o que pode falhar


melhor ter testes a mais do que testes a menos


Reescreva e altere o design de seu cdigo para que fique mais fcil de testar: promove design melhor!

O que devo testar?

Listas de tarefas (to-do-list)

Comece implementando os testes mais simples e deixe os testes realistaspara o final Requisitos, use-cases, diagramas UML: reescreva os requisitos em termos de testes Quebre requisitos complexos em pedaos menores. Algum reportou um bug? No conserte sem antes escrever um teste que o detecte (se voc no o fizer, ele volta!) Sugerem nomes e estrutura de classes da soluo Permitem que se decida sobre detalhes de implementao aps a elaborao do teste.

Bugs revelam testes

Descoberta de testes atividade de anlise e design


24

O que devo testar?

Determinar se parmetros comuns geram o resultado esperado

Estes so os testes comumente realizados pela maior parte dos programadores, que analisam apenas a situao conhecida do programa

Determinar se as condies limites geram resultados consistentes

Testar valores de entrada com caracteres invlidos, como, por exemplo, um arquivo chamado "!*W:Xn&Gi  /w>g/h#WQ@ Testar valores formatados incorretamente, como uma conta de email sem o caractere de arroba (@) Testar valores vazios, nulos ou zeros Testar valores extremos e inesperados, como, por exemplo, temperaturas acima de 1000 graus Testar valores duplicados onde no deveriam haver duplicatas Testar rotinas que esperam listas ordenadas que recebam listas no esto ordenadas e outros tipos de elementos fora de ordem

O que devo testar?

Determinar se possvel verificar inversas

Por exemplo, uma rotina que calcula a raiz quadrada de um nmero poderia calcular ser testada elevando-se seu resultado ao quadrado e comparando-o com o valor original

Determinar se possvel verificar por outros meios

Por exemplo, uma rotina que calcula a inversa de uma matriz poderia verificar se seu resultado est correto multiplicando-o pela matriz original e verificando se o produto igual matriz identidade Outro exemplo, o clculo da hipotenusa de um tringulo retngulo pode ser verificado calculando-se o seno do ngulo formado pela hipotenusa e pelo cateto adjacente

25

O que devo testar?

Repeties anlise por induo

As repeties devem ser testadas pelo menos nos casos em que o cdigo interno executado ...

Nenhuma vez Uma nica vez Um nmero maior que uma vez

Alm disso, devem ser testadas as situaes em que a repetio pode ser interrompida com comandos return e break Devemos criar um caso de teste para cada uma destas situaes

O que devo testar?

Determinar se possvel chegar a condies extremas


Falta de memria ou espao em disco Limitaes de transmisso de dados Sobrecarga do sistema (especialmente aplicaes Web) Limitaes de cores e resoluo do vdeo

26

Mock Objects

Objetivo dos testes de unidade: testar um mtodo

O que fazer quando um mtodo depende de outros recursos difceis de controlar, como a rede ou um banco de dados? Como testar a resposta de um programa quando estes recursos estiverem em situaes especficas, como alto trfego de dados, quebra de comunicao ou falta de espao em disco?

Primeira soluo

Criar um cenrio real do problema: por exemplo, podemos puxar o cabo de rede durante a execuo de um caso de teste O problema que impossvel automatizar a execuo deste caso de teste, pois ele depende sempre do operador humano para puxar o cabo ...

Mock Objects

Produo de televiso

Na produo de um filme ou comercial com atores importantes comum que as equipes de produo usem dubls de cmera Dubls de cmera so pessoas com aproximadamente a mesma altura, peso e outras caractersticas dos atores Eles so utilizados para testar o posicionamento das cmeras, a iluminao, o contraste com o fundo, entre outros fatores que podem influenciar durante a filmagem definitiva Sendo desconhecidos, os dubls de cmera so contratados por preo inferior aos atores de verdade Assim, os dubls permitem que todo o cenrio seja avaliado antes A i d bl it t d i j li d t dos atores propriamente ditos pisarem no estdio Enquanto o cenrio no estiver pronto, os atores caros no so necessrios ...

27

Mock Objects

Mock objects so classes que implementam a mesma interface de acesso dos elementos reais (SGBD, rede, ...)

Entretanto, o cdigo destes elementos permite simular o , g p comportamento dos elementos reais nas situaes desejadas

Utilizao de uma interface comum

A implementao de uma nica interface de acesso desejvel para que o sistema no precise diferenciar entre o objeto falso e o objeto real

Exemplo - jmockit

Exemplo disponvel em:

http://code.google.com/p/jmockit/source/browse/trunk/samples/ #samples%2FLoginService%253Fstate%253Dclosed

Biblioteca disponvel em:

http://code.google.com/p/jmockit

Tutorial disponvel em:

http://jmockit.googlecode.com/svn/trunk/www/tutorial/BehaviorB asedTesting.html asedTesting html

Pasta do Exemplo

28

Vous aimerez peut-être aussi