Buscar

JUnit - Aula

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

JUnit 
Disciplina: Teste de Software 
Prof. Sidney Nogueira 
DEPARTAMENTO DE ESTATíSTICA E INFORMÁTICA 
n  Aprender funções básicas do JUnit como criar/
executar testes e test suites 
n  Referência utilizada 
http://www.vogella.com/articles/JUnit/article.html 
 
Objetivo 
n  Framework bastante simples para escrever testes 
automáticos em Java 
n  Atualmente na versão 5.X 
n  Criado para testar unidades de código Java 
n  Métodos 
n  Classes 
n  Componentes 
JUnit 
n  Boa prática é colocar o código de testes 
separado do código da aplicação 
n  Outra classe 
n  Outro pacote 
n  Outro projeto 
n  Código de teste é colocado em uma classe 
chamada classe de testes 
n  Métodos de teste anotados com @Test 
JUnit 
n  Para baixar o projeto do Eclipse com todo o 
código do banco de exemplo 
http://goo.gl/2NFOJ4 
Banco Exemplo 
n  Criando uma classe de testes no Eclipse 
n  File → New → JUnit → JUnit Test case 
Criando classe de testes 
n  Exemplo: Classe de testes chamada TestConta 
package br.ufrpe.poo.banco.negocio; 
import static org.junit.Assert.*; 
import org.junit.*; 
public class TestConta { 
 @Test 
 public void testeConstrutor() { 
 Conta c = new Conta("1",100); 
 assertEquals("Numero incorreto", "1”, c.getNumero()); 
 assertEquals("Saldo incorreto", 100, c.getSaldo(), 0); 
 } 
} 
Classe de testes 
n  Métodos estáticos de JUnit que comparam o 
valor esperado (expected) vs o encontrado 
(current): 
n  Passo caso valores sejam iguais 
n  Falha caso valores sejam diferentes 
(AssertException) 
n  Dá erro quando exceção é levantada durante 
o teste 
n  Exemplo: 
public static void assertEquals(double esperado, 
 double atual, double tolerancia) 
Métodos de verificação (assertion) 
n  Ordem de execução dos métodos dentro de uma 
classe de testes não é garantida 
n  Crie métodos independentes 
n  Para rodar um teste no Eclipse 
n  Run → Run As → JUnit Test 
n  Para rodar fora do Eclipse use a classe 
n  org.junit.runner.JUnitCore 
Rodando classe de testes 
n  Resultado da execução no Eclipse da Classe 
TestConta (4 passam, 1 falha e 1 ignorado) 
Rodando classe de testes 
n  Significado dos vereditos de JUnit 
n  Error: aconteceu uma exceção 
n  Fail: método de asserção falhou 
n  Pass: todos os métodos asserção passaram 
n  Objetivo é deixar a barra totalmente verde! 
n  Corrigindo o teste: caso o problema seja no 
testes 
n  Corrigindo a implementação: caso o 
problema seja no SUT 
 
Rodando classe de testes 
n  Outros métodos de verificação 
Métodos de verificação 
Anotação Descrição 
 
Fail (String) 
 
 
Faz o teste falhar 
 
assertTrue([mensagem], 
boolean condicao) 
 
 
Verifica que a condição booleana é 
verdadeira 
 
assertEquals([message], 
esperado, atual) 
 
 
Verifica que os valores (objetos) são 
iguais 
n  Outros métodos de verificação 
Métodos de verificação 
Anotação Descrição 
 
assertNull([mensagem], 
object) 
 
Verifica que a referência é nula 
 
assertNotNull([message], 
object) 
 
Verifica que a referência não é nula 
 
assertSame([mensagem], 
esperado, atual) 
 
Verifica que referências apontam para 
mesmo objeto. 
 
assertNotSame([mensagem], 
esperado, atual) 
 
Verifica que referências não apontam 
para mesmo objeto. 
n  Exemplo: método de teste de TestConta que 
utiliza fail 
 
@Test 
public void testeDebitarSaldoSuficiente() { 
 Conta c = new Conta("123",300); 
 try { 
 c.debitar(200); 
 } catch (SaldoInsuficienteException e) { 
 fail("Excecao nao deveria ter sido levantada porque existe saldo"); 
 } 
 assertEquals(100, c.getSaldo(), 0); 
} 
Classe de testes 
n  Principais anotações 
Anotações na classe de testes 
Anotação Asssinatura 
método 
Descrição 
@Test public void 
m() 
Identifica um método de teste 
@Before public void 
m() 
 
Método que é rodado antes de 
cada teste 
@After public void 
m() 
Método que é rodado após cada 
teste 
@BeforeClass public static 
void m() 
Método rodado antes de todos os 
testes 
@AfterClass 
 
public static 
void m() 
Método rodado depois de todos 
os testes 
n  Outras anotações 
Rodando classe de testes 
Anotação Descrição 
@Ignore Ignora o teste (usado quando teste fica 
desatualizado). 
@Test (expected = 
Exception.class) 
Passa quando o método lança a exceção 
indicada. 
@Test(timeout = 50ms) Falha se a execução do método demora 
mais do que o tempo indicado. 
n  Exemplo: método de teste de TestConta que usa 
a anotação expected 
@Test (expected = SaldoInsuficienteException.class) 
public void testeDebitarForaLimite() 
 throws SaldoInsuficienteException { 
 
 Conta c = new Conta("123",300); 
 c.debitar(301); 
} 
Classe de testes 
n  Quando testando uma unidade rodamos apenas a 
classe de testes correspondente 
n  Quando queremos testar várias classes criamos 
uma suite de testes formada pelas classes de 
teste que queremos executar 
n  Suite de testes para um pacote 
n  Suite de testes para todas as classes do 
projeto 
n  Suite de testes de regressão 
n  etc 
Criando uma suite de testes 
n  Criando uma suite de testes no Eclipse 
n  File → New → Java → JUnit → JUnit Test Suite 
Criando uma suite de testes 
n  A classe a seguir corresponde a suite de testes 
com duas classes de teste (TestConta e 
TestePoupanca) 
package br.ufrpe.poo.banco.negocio; 
 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 
 
@RunWith(Suite.class) 
@SuiteClasses({ TesteConta.class, TestePoupanca.class }) 
public class AllTests { 
} 
Criando uma suite de testes 
n  A classe a seguir corresponde a suite de testes 
que inclui a suite de testes de negocio 
package br.ufrpe.poo.banco; 
 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 
 
@RunWith(Suite.class) 
@SuiteClasses({br.ufrpe.poo.banco.negocio.AllTests.class}) 
public class TodosOsTestes { 
} 
Criando uma suite de testes 
n  Pode ser conveniente rodar os teste sem utilizar 
a interface do Eclipse 
n  Testes JUnit podem ser executados 
independente do Eclipse 
n  Exemplos: 
n  Rodar os testes pela linha de comando 
n  Utilizar o Ant para criar scripts que 
compilem, executam testes e geram 
relatórios 
Rodando test suite sem GUI do Eclipse 
n  Soluções de integração contínua combinam 
controle de versão do código com execução dos 
testes 
n  Quando o desenvolvedor envia um nova versão 
do código o servidor: 
n  Compila o código, roda os testes, gera 
relatórios, notifica os responsáveis sobre os 
resultados 
n  Exemplo: Jenkis é um servidor de integração 
contínua para projetos Java/Scala 
Rodando test suite sem GUI do Eclipse 
n  O código a seguir roda todos os testes e imprime 
apenas os testes que falharam 
 
package br.ufrpe.poo.banco; 
 
import org.junit.runner.*; 
import org.junit.runner.notification.Failure; 
 
public class RodarTodosOsTestes { 
 public static void main(String[] args) { 
 Result result = JUnitCore.runClasses(TodosOsTestes.class); 
 for (Failure failure : result.getFailures()) { 
 System.out.println(failure.toString()); 
 } 
} 
Rodando test suite sem GUI do Eclipse 
n  É possível criar uma classe de testes 
parametrizada por dados 
n  Cada teste roda uma vez para cada 
parâmetro fornecido 
n  Isto é útil para criar testes a partir de massas de 
dados 
n  Valor de entrada e respectiva saída 
fornecidos 
 
Classe de teste parametrizada 
n  Primeiraparte da classe de testes parametrizada 
TesteTransferencia 
 
package br.ufrpe.poo.banco.negocio; 
 
@RunWith(Parameterized.class) 
public class TesteContaTransferencia { 
 
 private double saldoOrigemAntes, saldoDestinoAntes, valorTransferir, 
 saldoOrigemDepois, saldoDestinoDepois; 
 
 public TesteContaTransferencia(double oa, double da, double v, 
 double od, double dd) { 
 this.saldoOrigemAntes = oa; 
 ... 
 } 
 ... 
 
Classe de teste parametrizada 
n  Segunda parte da classe de testes parametrizada 
TesteContaTransferencia 
 
@Parameters 
public static Collection<Object[]> data() { 
 Object[][] data = new Object[][] { { 100, 100, 50, 50, 150 }, 
 { 100, 100, 100, 0, 200 } }; 
 return Arrays.asList(data); 
 } 
 
 @Test 
 public void testTransferencia() throws SaldoInsuficienteException { 
 Conta origem = new Conta("1",this.saldoOrigemAntes); 
 Conta destino = new Conta("2", this.saldoDestinoAntes); 
 origem.debitar(this.valorTransferir); 
 destino.creditar(this.valorTransferir); 
 assertEquals(this.saldoOrigemDepois, origem.getSaldo(), 0); 
 assertEquals(this.saldoDestinoDepois, destino.getSaldo(), 0); 
 } 
} 
Classe de teste parametrizada

Outros materiais