Click here to load reader
Upload
vuphuc
View
212
Download
0
Embed Size (px)
Citation preview
JUnit: framework de testesunitários
Fred Lopes
Agenda
Parte 1 - teoria Testes unitários JUnit
Introdução Arquitetura API resumida Boas práticas Exemplos de uso
Parte 2 – prática (Eclipse) Criando testes
Test Case Test Suite
Executando testes
Testes unitários
Fase do processo de teste em que se testam as menoresunidades de software desenvolvidas Objetivo
prevenir o aparecimento de bug’s oriundo de códigos mal escritos egarantir um nível de qualidade de produto durante odesenvolvimento de software
Responsabilidade do próprio desenvolvedor Tipicamente executa um método individualmente
compara uma saída conhecida após o processamento da mesma Não testam todo o software Em POO: unidade pode ser um método, uma classe ou um
objeto
JUnit - introdução
Framework (arcabouço) livre para testesautomatizados escrito em Java
Escrito originalmente por Kent Beck (ExtremeProgramming) e Erich Gamma (Design Patterns)
Integração com as principais IDEs Grande comunidade de usuários Utilizado principalmente no desenvolvimento de
testes de unidade http://www.junit.org
JUnit - introdução
Vantagens Permite a criação rápida de código de teste possibilitando um
aumento na qualidade do desenvolvimento e teste; Amplamente utilizado pelos desenvolvedores da comunidade
código-aberto, possuindo um grande número de exemplos; Uma vez escritos, os testes são executados rapidamente sem
que, para isso, seja interrompido o processo dedesenvolvimento;
JUnit checa os resultados dos testes e fornece uma respostaimediata;
JUnit é livre e orientado a objetos.
Pode verificar cada método de uma classe Exibição de possíveis erros e/ou falhas
JUnit - arquitetura
JUnit - arquitetura
Classe TestCase run() – Cria um contexto (método setUp); em seguida executa o
código usando um contexto e verifica o resultado (métodorunTest); e por fim, limpa o contexto (método tearDown).
setUp() – Método chamado antes de cada método, pode serutilizado para abrir uma conexão de banco de dados.
tearDown() – Método chamado depois de cada método de teste,usado para desfazer o que setUp() fez, por exemplo fechar umaconexão de banco de dados.
runTest() – Método responsável por controlar a execução de umteste particular.
Classe TestSuite addTest() – Método responsável por adicionar um novo teste.
JUnit – API resumida
Método Descrição Teste passa se
assertEquals(a,b) Compara dois valores a.equals(b)
assertFalse(a)Avalia uma expressãobooleana
a == false
assertTrue(a) a == true
assertNotNull(a)Compara uma variávelcom nulo
a != null
assertNull(a) a == null
assertNotSame(a,b)Compara dois objetos
a == b
assertSame(a,b) a != b
fail() Causa uma falha noteste atual
JUnit – boas práticas
Test Case Class: [NomeClasse]Test.java,onde NomeClasse é o nome da classe a sertestada. Exemplo:
Classe: Pessoa classe de teste: PessoaTest
Test Case Method: test[NomeMetodo], ondeNomeMetodo é o método a ser testado. Exemplo:
Método: Pessoa.calculaIdade() PessoaTest.testCalculaIdade()
JUnit – exemplo de uso
import junit.framework.TestCase;
/** * Testes de unidade para a classe {@link Pessoa} */public class TestPessoa extends TestCase {
/** * Um teste de unidade para verificar se o nome está * formatado corretamente */ public void testObterNomeCompleto() { Pessoa p = new Pessoa(“Fulano”, “Tal”); assertEquals(“Fulano Tal”, p.getNomeCompleto()); }
JUnit – exemplo de uso
/** * Um teste de unidade para verificar se os nulos são * tratados corretamente */ public void testNomeEhNulo() { Pessoa p = new Pessoa(null, “Tal”); assertEquals(“? Tal”, p.getNomeCompleto());
// Este código só é executado se passar pelo // assertEquals anterior. p = new Pessoa(“Fulano”, null); assertEquals(“Fulano ?”, p.getNomeCompleto()); }}
JUnit – exemplo de uso
Fixture: Conjunto de dados de teste e objetosutilizados na execução de um ou mais testes
Para reaproveitar uma Fixture em mais de um teste: Sobrescreva o método setUp() (inicialização)
Sobrescreva o método tearDown() (limpeza)
protected void setUp() {contatos = new ArrayList();
}
protected void tearDown() { contatos.clear();}
JUnit – exemplo de uso
public class TesteSimples extends TestCase {private Collection colecao;protected void setUp() {
contatos = new ArrayList();}
protected void tearDown() { contatos.clear();
}
public void testColecaoVazia() {assertTrue(contatos.isEmpty());
}
public void testColecaoComUmItem() { contatos.add("itemA");
assertEquals(1, contatos.size());
}
}
JUnit – exemplo de uso
Possível ordem de execução: setUp()
testColecaoComUmItem() tearDown() setUp()
testColecaoVazia() tearDown()
Como os testes são chamados por reflexão, a ordemde execução dos testes pode não seguir o mesmofluxo do código
Garantia: setUp() será executado antes e tearDown()será executado depois
JUnit – Eclipse
Agora vamos ver exemplos reaisfuncionando...