Académique Documents
Professionnel Documents
Culture Documents
@Test => indica que um mtodo de teste. assertEquals para double: assertEquals(valorEsperado, valorObtido, precisao)
Executar Testes
Vermelho: Falha
Resultados
Verde em testConta: ok
Ignorando testes
@Ignore => annotation que indica este teste no dever ser executado
Ignorando Testes
Teste - Depsito
Executando os Testes
Implementando o Saque
Executando os testes
Tratando Excees
10
Tratando Excees
11
Executando os Testes
12
Executando os Testes
13
Executando os Testes
14
Executando os Testes
15
16
Executando os 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
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);
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
http://netbeans.org/kb/docs/java/junit-intro.html#Exercise_30
www.junit.org
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.
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).
Testes devem ser construdos para rodar muito rapidamente. Testes podem ser executados seletivamente.
23
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)
Reescreva e altere o design de seu cdigo para que fique mais fcil de testar: promove design melhor!
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.
24
Estes so os testes comumente realizados pela maior parte dos programadores, que analisam apenas a situao conhecida do programa
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
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
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
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
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
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
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
http://code.google.com/p/jmockit/source/browse/trunk/samples/ #samples%2FLoginService%253Fstate%253Dclosed
http://code.google.com/p/jmockit
Pasta do Exemplo
28