Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
JUnit 4.11
Framework para Automatizar a Execução de Teste
Unitário
Auri Marcelo Rizzo Vincenzi1 , Márcio Eduardo Delamaro2 e
José Carlos Maldonado2
1 Departamento de Computação
Universidade Federal de São Carlos
2 Instituto
Vincenzi, deMaldonado
Delamaro & Ciências Matemáticas e de Computação
Universidade
JUnit 4.11 de São Paulo 1/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Este material pode ser utilizado livremente respeitando-se a licença
Creative Commons: Atribuição – Uso Não Comercial –
Compartilhamento pela mesma Licença (by-nc-sa).
Ver o Resumo da Licença | Ver o Texto Legal
Vincenzi, Delamaro & Maldonado
JUnit 4.11 2/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Organização
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas
Vincenzi, Similares
Delamaro & Maldonado
Referências
JUnit 4.11 3/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 4/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Histórico
Histórico
I Desenvolvido por Kent Beck e Erich Gamma, o framework de teste
de unidade JUnit se tornou uma das bibliotecas Java mais utilizadas
no mundo.
I De acordo com Martin Fowler “Never in the field of software
development was so much owed by so many to so few lines of code”.
I Inı́cio do JUnit: 1994.
I Versão 3.8: lançada em agosto de 2002.
I Versão 3.8.1: lançada em setembro de 2002 com defeitos corrigidos.
I Versão 4.0: lançada em fevereiro de 2006.
I Versão 3.8.2: lançada em março de 2006.
I ...
I Versão 4.11: lançada em novembro de 2012.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 5/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Pré-requisitos
Pré-requisitos
I Conhecimento da linguagem Java.
I Conhecimento de teste de software.
I Kit de desenvolvimento Java versão 1.5 ou superior. Versão
4.x do JUnit utiliza recursos de anotações disponı́vel apenas a
partir desta versão do Java.
I Desejável: conhecimento de Eclipse e Maven.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 6/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 7/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Instalação
Instalação (1)
I Página do projeto: [Link]
I Distribuı́do em forma compactada.
I A versão 4.11 traz uma série de melhorias em relação a versão
predecessora 3.8.2.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 8/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Instalação
Instalação (2)
I Para usar a ferramenta, basta fazer o download dos arquivos
jars abaixo e incluı́-los no CLASSPATH do projeto.
I [Link] – [Link]
I [Link] – [Link]
I Opcionalmente, basta criar os projetos usando Maven e
adicionar a dependência abaixo no arquivo [Link].
<d e p e n d e n c y>
<g r o u p I d> j u n i t</ g r o u p I d>
< a r t i f a c t I d> j u n i t</ a r t i f a c t I d>
<v e r s i o n>4 . 1 1</ v e r s i o n>
<s c o p e> t e s t</ s c o p e>
</ d e p e n d e n c y>
Vincenzi, Delamaro & Maldonado
JUnit 4.11 9/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
O Framework
O Framework JUnit
I Framework de código aberto para o teste de programas Java.
I Passos básicos para uso do framework:
I Criar alguns objetos.
I Enviar algumas mensagens a esses objetos.
I Verificar se o resultado obtido é igual ao esperado com o uso
de asserções (disponı́veis no framework).
Vincenzi, Delamaro & Maldonado
JUnit 4.11 10/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 11/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Compilando e Executando via Linha de Comando
A Especificação Exemplo
I Programa Identifier: parte de um compilador que verifica
se um identificador é válido em dada linguagem de
programação
I Código fonte: [Link] e
[Link] (disponı́veis no material do
treinamento)
I Classe principal: IdentifierMain
I Forma de execução:
I Identificador deve ser fornecido como parâmetro na invocação
do programa.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 12/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Compilando e Executando via Linha de Comando
Compilando o Identifier
cd s r c
src$ javac I d e n t i f i e r . java IdentifierMain . java
Vincenzi, Delamaro & Maldonado
JUnit 4.11 13/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Compilando e Executando via Linha de Comando
Executando o Identifier
Para invocar o programa, basta executar o comando abaixo, dentro
do diretório onde o programa foi instalado:
1 cd s r c
2
3 src$ java IdentifierMain
4 Uso : I d e n t i f i e r M a i n < s t r i n g >
5
6 s r c $ j a v a I d e n t i f i e r M a i n ”abc12 ”
7 Valido
8
9 s r c $ j a v a I d e n t i f i e r M a i n ”c o n t ∗1 ”
10 Invalido
11
12 src$ java IdentifierMain ”1soma ”
13 Invalido
14
Vincenzi, Delamaro & Maldonado
15 src$ java IdentifierMain ”a123456 ”
JUnit
16 4.11
Invalido 14/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Invocando o Eclipse
I Durante o treinamento, os exemplos serão executados,
preferencialmente, no Eclipse.
I A versão utilizada é a que acompanha o
[Link] já configurada
com a maioria dos plugins necessários para o treinamento,
incluindo o JUnit.
I Plug-ins e ferramentas adicionais serão instalados quando
necessário.
I Para invocar o Eclipse, basta executar:
<DIRETORIO INSTALACAO>/adt−b u n d l e−l i n u x −x86 64 −20131030/ e c l i p s e / e c l i p s e
Vincenzi, Delamaro & Maldonado
JUnit 4.11 15/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Tela Inicial do Eclipse
Vincenzi, Delamaro & Maldonado
JUnit 4.11 16/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Instalando o Plugin m2eclipse
I Aberto o Eclipse, entre no menu Help->Install New
Software...
I No campo Work with selecione – All Available Sites –
I No filtro preencha com m2e (abreviatura para Maven To
Eclipse plugin)
I Após aparecerem as opções, selecione para instalação o m2e -
Maven Integration for Eclipse
I Prossiga com a instalação normal. Ao final do processo,
reinicialize o Eclipse para concluir a instalação.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 17/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Tela Instalação de Plugins
Vincenzi, Delamaro & Maldonado
JUnit 4.11 18/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (1)
I Aberto o Eclipse, entre no menu File->New->Project...
I Escolha Maven e Maven Project
Vincenzi, Delamaro & Maldonado
JUnit 4.11 19/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (2)
I Em seguida, assinale a opção Create simple projecy (skip
architype selection)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 20/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (3)
I Em seguida, preencha os campos para o projeto Identifier,
conforme tela a seguir e finalmente clique em Finalizar.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 21/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (4)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 22/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (5)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 23/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (6)
I Observe na tela anterior que o Eclipse está acusando um
warning nesse projeto.
I Ambiente de execução do J2SE-1.5 definido no projeto, mas
essa versão do Java não está disponı́vel.
I Para alterar isso, clique com o direito do mouse sobre o nome
do projeto Identifier e escolha a última opção do menu
suspenso Properties...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 24/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (7)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 25/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (8)
I Na tela que abrir, selecione JRE System Libraty [J2SE-1.5]
e clique em remover.
I Em seguida clique no botão Add Library... e selecione JRE
System Library e clique em Next
Vincenzi, Delamaro & Maldonado
JUnit 4.11 26/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (9)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 27/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (10)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 28/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (11)
I Escolha a opção padrão e clique em Finish
I Finalmente, aparecerá o projeto criado sem warnings
associado.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 29/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Projeto Maven no Eclipse
Criando um Projeto Maven (12)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 30/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Copiando a Aplicação para o Projeto
I Copie os arquivos [Link] e
[Link] para dentro da pasta
src/main/java.
I Após copiar, clique com o botão direito sobre o nome do
projeto Identifier e escolha a opção Refresh do menu
suspenso.
I Com isso, a o Eclipse irá compilar o projeto e, ao final, a
aplicação está pronta para ser executada de dentro do Eclipse.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 31/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
O Método Principal (1)
I O método principal do programa Identifier é o método:
public boolean validateIdentifier(String s)
I Recebe um string s que corresponde a um dado identificador
I Retorna true se for um identificador válido em Silly Pascal,
ou false caso contrário.
“Um identificador válido deve começar com uma letra
e conter apenas letras ou dı́gitos. Além disso, deve ter
no mı́nimo um e no máximo seis caracteres de compri-
mento.”
Vincenzi, Delamaro & Maldonado
JUnit 4.11 32/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
O Método Principal (2)
2 public boolean validateIdentifier(String s) {
3 char achar;
4 boolean valid_id = false;
5 achar = [Link](0);
6 valid_id = valid_s(achar);
7 if ([Link]() > 1) {
8 achar = [Link](1);
9 int i = 1;
10 while (i < [Link]() - 1) {
11 achar = [Link](i);
12 if (!valid_f(achar))
13 valid_id = false;
14 i++;
15 }
16 }
17
18 if (valid_id && ([Link]() >= 1) && ([Link]() < 6))
19 return true;
20 else
21 return false;
Vincenzi,
22 Delamaro
} & Maldonado
JUnit 4.11
33/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Incluindo Dependência do JUnit no Maven (1)
I Antes de iniciar a criação da classe de teste é possı́vel incluir a
dependência da biblioteca do JUnit no projeto Maven.
1. Clique o botão direito do mouse sobre projeto Identifier.
2. Escolha a opção Maven->Add Dependency. Preencha a tela conforme
abaixo:
Vincenzi, Delamaro & Maldonado
JUnit 4.11 34/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Incluindo Dependência do JUnit no Maven (2)
< p r o j e c t x m l n s=” h t t p : // maven . a p a c h e . o r g /POM/ 4 . 0 . 0 ”
x m l n s : x s i=” h t t p : //www . w3 . o r g /2001/XMLSchema−i n s t a n c e ”
x s i : s c h e m a L o c a t i o n=” h t t p : // maven . a p a c h e . o r g /POM/ 4 . 0 . 0 h t t p : // maven . a p a c h e .
<m o d e l V e r s i o n> 4 . 0 . 0</ m o d e l V e r s i o n>
<g r o u p I d> I d e n t i f i e r</ g r o u p I d>
< a r t i f a c t I d> I d e n t i f i e r</ a r t i f a c t I d>
<v e r s i o n>1 . 0</ v e r s i o n>
<name> I d e n t i f i e r</name>
< d e s c r i p t i o n>V a l i d a d o r de i d e n t i f i c a d o r</ d e s c r i p t i o n>
<d e p e n d e n c i e s>
<d e p e n d e n c y>
<g r o u p I d> j u n i t</ g r o u p I d>
< a r t i f a c t I d> j u n i t</ a r t i f a c t I d>
<v e r s i o n>4 . 1 1</ v e r s i o n>
<s c o p e> t e s t</ s c o p e>
</ d e p e n d e n c y>
</ d e p e n d e n c i e s>
</ p r o j e c t>
Vincenzi, Delamaro & Maldonado
JUnit 4.11 35/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Criando o Template do JUnit (1)
I Clique com o botão direito sobre a pasta src/test/java
no projeto Identifier.
I Escolha a opção New->JUnit Test Case.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 36/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Criando o Template do JUnit (2)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 37/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Criando o Template do JUnit (3)
I Na janela que abrirá, preencha apenas o nome da classe de
teste a ser criada com IdentifierTestCase (sem a
extensão) e clique Finish
I Veja tela a seguir para detalhes.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 38/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Criando o Template do JUnit (4)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 39/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Copiando a Aplicação para o Projeto
Criando o Template do JUnit (5)
I O código criado é bastante simples e não dá ideia do poder
que existe por traz dele.
1 import static [Link].*;
2
3 import [Link];
4
5
6 public class IdentifierTestCase {
7
8 @Test
9 public void test() {
10 fail("Not yet implemented");
11 }
12
13 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 40/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (1)
I Uma classe de teste do JUnit pode conter vários casos de
teste.
I Um caso de teste é um método dentro dessa classe, precedido
da anotação @Test.
I É uma boa prática de escrita de casos de teste unitário
separar cada caso de teste em um método de teste.
I Da mesma forma, deve-se agrupar em uma classe de teste os
casos de teste referentes a determinada classe e/ou método
em teste, visando facilitar a localização dos testes.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 41/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (2)
I A primeira parte do código inclui as classes exigidas pelo
framework até o momento.
I Classes de asserções do pacote [Link] que
implementam os métodos que permitem a comparação entre o
resultado obtido e o esperado.
I Classe [Link] que implementa a anotação
@Teste.
1 import static [Link].*;
2
3 import [Link];
Vincenzi, Delamaro & Maldonado
JUnit 4.11 42/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (3)
I Em seguida vem a definição do nome da classe de teste
IdentifierTestCase que contém, até o momento, um
único método de teste, denominado test().
I Na classe de teste, podem existir tantos métodos quanto
necessário mas apenas aqueles precedidos da anotação
@Teste é que são considerados pelo framework como sendo
casos de teste.
6 public class IdentifierTestCase {
7
8 @Test
9 public void test() {
10 fail("Not yet implemented");
11 }
12
Vincenzi, Delamaro & Maldonado
13 }
JUnit 4.11
43/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (4)
I Um método de teste sempre deve:
I ter modificador de de acesso public
I ter retorno do tipo void
I não possuir parâmetros
8 @Test
9 public void test() {
10 fail("Not yet implemented");
11 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 44/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (5)
I No corpo de um método de teste basicamente o que se faz é:
1. criar um objeto da classe que contém o método a ser testado
(se o método a ser testado for um método de instância)
2. invocar o método em teste com os parâmetros desejados e
armazenar o valor de retorno
3. utilizar uma das asserções disponı́veis no framework para
comparar o resultado obtido com o resultado esperado.
I No template criado, nenhum dos passos acima é realizado.
I O método contém apenas uma chamada ao método fail,
disponı́vel no pacote [Link], que, se
executado, acusa que o teste falhou.
8 @Test
9 public void test() {
Vincenzi, Delamaro & Maldonado
10 fail("Not yet implemented");
JUnit
11 4.11 } 45/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (6)
I Para executar o teste, basta clicar com o botão direito sobre o
nome do arquivo de casos de teste e escolher a opção Run
As->JUnit Test
I Na primeira execução, é solicitado ao usuário escolher qual
executor de teste é para ser usado. Escolha o Eclipse JUnit
Lancher e clique em Ok.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 46/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Entendendo o Código
Entendendo o Código (7)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 47/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (1)
I Para a criação de um caso de teste é necessário:
I Identificar o método a ser testado: validateIdentifier
I Compreender a especificação do método: o que recebe de
entrada e qual a saı́da produzida em função da entrada
escolhida.
I Entrada: cadeia de caracteres (String)
I Saı́da: true ou false
I Comparar a saı́da produzida (obtida) com aquela que deveria
ser gerada conforme a especificação.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 48/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (2)
I Primeiro teste completo.
7 @Test
8 public void validate01() {
9 Identifier id = new Identifier();
10 boolean obtido;
11 obtido = [Link]("a1");
12 assertEquals(true, obtido);
13 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 49/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (3)
I Código completo da classe de teste:
[Link], conforme JUnit
Versão 4.11.
1 import static [Link].*;
2
3 import [Link];
4
5 public class IdentifierTestCase {
6
7 @Test
8 public void validate01() {
9 Identifier id = new Identifier();
10 boolean obtido;
11 obtido = [Link]("a1");
12 assertEquals(true, obtido);
13 }
Vincenzi, Delamaro & Maldonado
14 }
JUnit 4.11
50/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (4)
I Novamente, para executar o teste criado basta clicar com o
botão direito sobre o nome do arquivo de casos de teste e
escolher a opção Run As->JUnit Test; ou
I Se a janela do JUnit continua aberta, basta clicar no ı́cone
para reexecutar o conjunto de teste, conforme abaixo.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 51/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (4)
I Resultado final: teste aprovado.
I Ou seja, para a entrada "a1" que representa, conforme a
especificação um identificador válido, o método
validateIdentifier retornou true.
I O método assertEquals compara o resultado esperado
true com o obtido, armazenado na variável obtido que,
nesse caso, também continha o valor true.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 52/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Criando Casos de Teste
Criando Casos de Teste (5)
I Isso é tudo o que se precisa saber no momento para se criar e
executar de forma automática teste com o JUnit.
I Obviamente existe muitos outros recursos que serão
explorados durante o treinamento.
Vamos praticar?!
Vincenzi, Delamaro & Maldonado
JUnit 4.11 53/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Encontrando uma Falha (1)
I Melhorar o conjunto de teste incluindo novos casos de teste
Conjunto de teste inicial
T0 = {("a1",Valido), ("",Invalido),
("A1b2C3d",Invalido), ("2B3",Invalido),
("Z#12",Invalido) }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 54/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Encontrando uma Falha (2)
15 @Test
16 public void validate02() {
17 Identifier id = new Identifier();
18 boolean obtido;
19 obtido = [Link]("");
20 assertEquals(false, obtido);
21 }
22
23 @Test
24 public void validate03() {
25 Identifier id = new Identifier();
26 boolean obtido;
27 obtido = [Link]("A1b2C3d");
28 assertEquals(false, obtido);
29 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 55/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Encontrando uma Falha (3)
31 @Test
32 public void validate04() {
33 Identifier id = new Identifier();
34 boolean obtido;
35 obtido = [Link]("2B3");
36 assertEquals(false, obtido);
37 }
38
39 @Test
40 public void validate05() {
41 Identifier id = new Identifier();
42 boolean obtido;
43 obtido = [Link]("Z#12");
44 assertEquals(false, obtido);
45 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 56/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Encontrando uma Falha (4)
Executando os novos testes...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 57/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Corrigindo o Defeito (1)
2 public boolean validateIdentifier(String s) {
3 char achar;
4 boolean valid_id = false;
5 achar = [Link](0);
6 valid_id = valid_s(achar);
7 if ([Link]() > 1) {
8 achar = [Link](1);
9 int i = 1;
10 while (i < [Link]() - 1) {
11 achar = [Link](i);
12 if (!valid_f(achar))
13 valid_id = false;
14 i++;
15 }
16 }
17
18 if (valid_id && ([Link]() >= 1) && ([Link]() < 6))
19 return true;
20 else
21 return false;
22 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 58/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Corrigindo o Defeito (2)
2 public boolean validateIdentifier(String s) {
3 char achar;
4 boolean valid_id = false;
5 if ([Link]() > 0) {
6 achar = [Link](0);
7 valid_id = valid_s(achar);
8 if ([Link]() > 1) {
9 achar = [Link](1);
10 int i = 1;
11 while (i < [Link]() - 1) {
12 achar = [Link](i);
13 if (!valid_f(achar))
14 valid_id = false;
15 i++;
16 }
17 }
18 }
19 if (valid_id && ([Link]() >= 1) && ([Link]() < 6))
20 return true;
21 else
22 return false;
23 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 59/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Corrigindo o Defeito (3)
Reexecutando os testes...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 60/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Definindo Assertivas (1)
I JUnit oferece diversos tipos de assertivas.
I Para uma lista completa, consulte a classe Assert na API do
JUnit
I Algumas mais comuns são:
I assertEquals(<esperado>,<obtido>)
I assertNotSame(<esperado>,<obtido>)
I assertSame(<esperado>,<obtido>)
I assertTrue(<expressãológica>)
I assertFalse(<expressãológica>)
I assertNull(Object)
I assertNotNull(Object)
I fail(String)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 61/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Definindo Assertivas (2)
I Oráculo: comparar o resultado obtido com o esperado,
viabiliza a execução automática dos casos de teste.
I Para utilizar:
I import [Link];
I Uso: [Link](a,b);
I import static [Link].*;
I Uso: assertEquals(a,b);
Vincenzi, Delamaro & Maldonado
JUnit 4.11 62/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Encontrando uma Falha e Corrigindo o Defeito
Definindo Assertivas (cont.)
7 @Test
8 public void validate01() {
9 Identifier id = new Identifier();
10 boolean obtido;
11 obtido = [Link]("a1");
12 assertEquals(true, obtido);
13 }
14
15 @Test
16 public void validate02() {
17 Identifier id = new Identifier();
18 boolean obtido;
19 obtido = [Link]("");
20 assertEquals(false, obtido);
21 }
22
23 @Test
24 public void validate03() {
25 Identifier id = new Identifier();
26 boolean obtido;
27 obtido = [Link]("A1b2C3d");
28 assertEquals(false, obtido);
29 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 63/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (1)
I Existem situações em que, antes da execução de cada caso de
teste algumas ações precisam ser executadas.
I Em outras, após a execução de cada caso de teste é que se
deve executar alguma ação.
I Duas anotações especiais são definidas:
I @Before – faz com que o método anotado seja executado
antes de cada caso de teste. Utilizado para colocar o
programa num estado conhecido.
I @After – faz com que o método anotado seja sempre
executado após cada caso de teste. Utilizado, em geral, para
liberar recursos utilizado pelo caso de teste.
I Para a utilização dessas anotações é necessário importar as
classes [Link] e [Link],
Vincenzi, Delamaro & Maldonado
JUnit 4.11 64/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (2)
Observe a classe de teste abaixo na qual o objeto id é inicializado
em cada método de teste.
7 @Test
8 public void validate01() {
9 Identifier id = new Identifier();
10 boolean obtido;
11 obtido = [Link]("a1");
12 assertEquals(true, obtido);
13 }
14
15 @Test
16 public void validate02() {
17 Identifier id = new Identifier();
18 boolean obtido;
19 obtido = [Link]("");
20 assertEquals(false, obtido);
21 }
22
23 @Test
24 public void validate03() {
25 Identifier id = new Identifier();
26 boolean obtido;
27 obtido = [Link]("A1b2C3d");
28 assertEquals(false, obtido);
29 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 65/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (3)
I Essa inicialização pode ser feita dentro de um método
anotado com @Before
1 import static [Link].*;
2
3 import [Link];
4 import [Link];
5
6 public class IdentifierTestCase {
7
8 private Identifier id;
9
10 @Before
11 public void inicializa() {
12 id = new Identifier();
13 }
14
15 @Test
16 public void validate01() {
17 boolean obtido;
18 obtido = [Link]("a1");
19
Vincenzi, assertEquals(true,
Delamaro & Maldonado obtido);
20 }
JUnit 4.11
66/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (4)
22 @Test
23 public void validate02() {
24 boolean obtido;
25 obtido = [Link]("");
26 assertEquals(false, obtido);
27 }
28
29 @Test
30 public void validate03() {
31 boolean obtido;
32 obtido = [Link]("A1b2C3d");
33 assertEquals(false, obtido);
34 }
35
36 @Test
37 public void validate04() {
38 boolean obtido;
39 obtido = [Link]("2B3");
40 assertEquals(false, obtido);
41 }
42
43 @Test
44 public void validate05() {
45 boolean obtido;
46 obtido = [Link]("Z#12");
47 assertEquals(false, obtido);
48 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 67/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (5)
I Uma novidade introduzida na versão 4.x é a possibilidade de
executar algum método antes e após o inı́cio do conjunto de
teste como um todo.
I Duas anotações especiais são definidas para isso:
I @BeforeClass – faz com que o método anotado seja
executado antes de cada classe de teste. Útil para alocar
recursos computacionalmente “caros” uma única vez.
I @AfterClass – faz com que o método anotado seja sempre
executado após cada classe de teste. Útil para liberar
recursos computacionalmente “caros” uma única vez.
IPara a utilização dessas anotações é necessário importar as
classes [Link] e
[Link],
Vincenzi, Delamaro & Maldonado respectivamente.
JUnit 4.11 68/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Métodos Especiais
Anotações Especiais do Framework (6)
Sı́ntese das anotações especiais para inicializar e encerrar conjunto
de teste e caso de teste.
@BeforeClass e @AfterClass @Before e @After
Somente um método por classe pode ser Múltiplos métodos podem ser anotados.
anotado. A ordem de execução é indefinida. Mé-
todos sobrescritos não são executados.
Nomes dos métodos são irrelevantes. Nomes dos métodos são irrelevantes.
Executa uma única vez por classe de Executa antes/após cada método de
teste. teste.
Método @BeforeClass da superclasse Métodos @Before da superclasse são
é executado antes do da subclasse. Mé- executados antes dos da subclasse. Mé-
todo @AfterClass da superclasse é exe- todos @After da superclasse são execu-
cutado após o da subclasse. tados após os da subclasse.
Método deve ser público public e está- Método deve ser público public e não-
tico static. estático.
É garantida a execução do método É garantida as execuções dos métodos
@AfterClass mesmo se um método @After mesmo se os métodos @Before
Vincenzi, @BeforeClass lançar uma exceção.
Delamaro & Maldonado ou @Test lançarem exceções.
JUnit 4.11 69/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 70/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (1)
I Não presente nas versões anteriores à versão 4.x
I Casos de testes devem executar rapidamente.
I Impede que um caso de teste execute indefinidamente em
caso de looping.
I Útil no teste de conexões com servidores ou banco de dados.
I Caso o servidor esteja lento ou não respondendo, os casos de
testes podem continuar a execução.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 71/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (2)
Considere a existência de um defeito na linha 15, conforme
ilustrado abaixo, no método validateIdentifier.
2 public boolean validateIdentifier(String s) {
3 char achar;
4 boolean valid_id = false;
5 if ([Link]() > 0) {
6 achar = [Link](0);
7 valid_id = valid_s(achar);
8 if ([Link]() > 1) {
9 achar = [Link](1);
10 int i = 1;
11 while (i < [Link]() - 1) {
12 achar = [Link](i);
13 if (!valid_f(achar))
14 valid_id = false;
15 //i++; //Defeito
16 }
17 }
18 }
19 if (valid_id && ([Link]() >= 1) && ([Link]() < 6))
20 return true;
21 else
22 return false;
23 }
Vincenzi, Delamaro & Maldonado
Exercı́cio: Compile e tente executar com os casos de testes atuais.72/100
JUnit 4.11
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (3)
A execução do teste 3 está em looping...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 73/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (4)
Considere que a classe de teste fosse alterada como ilustrado
abaixo.
1 import static [Link].*;
2
3 import [Link];
4 import [Link];
5
6 public class IdentifierTestCase {
7
8 private Identifier id;
9 public static final int LIMIT=200;
10
11 ...
12
13 @Test(timeout=LIMIT)
14 public void validate03() {
15 boolean obtido;
16 obtido = [Link]("A1b2C3d");
17 assertEquals(false, obtido);
18 }
19
20 @Test(timeout=LIMIT)
21 public void validate04() {
22 boolean obtido;
23
Vincenzi, obtido
Delamaro = [Link]("2B3");
& Maldonado
24 assertEquals(false, obtido);
JUnit
25 4.11 } 74/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (5)
Após o timeout a execução termina acusando problemas na
execução dos testes...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 75/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Temporização em Casos de Teste
Caso de Teste Temporizado (6)
Após o correção do defeito, os testes voltam a executar
normalmente...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 76/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Teste de Exceções
Testando Exceções (1)
Embora o exemplo em questão não lance nenhum tipo de exceção,
a criação de um caso de teste para avaliar se uma exceção correta
está sendo lançada é ilustrado abaixo:
51 @Test(expected = [Link])
52 public void excecaoString() {
53 String str = new String("Exemplo JUnit");
54 [Link](30);
55 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 77/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Teste de Exceções
Testando Exceções (2)
Resultado do teste de exceção: aprovado.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 78/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Definindo um Conjunto de Teste
Definindo um Conjunto de Teste (1)
I Um conjunto de teste serve para agrupar várias classes de
teste e executá-las em sequência.
I Na versão 4.x isso é feito por meio de anotações:
I @RunWith – define qual a classe responsável pela execução
dos testes. Quando não especificada, o JUnit utiliza a classe
padrão
[Link].
I @Suite – define o nome das classes de teste que irão compor
o conjunto de teste.
I Para utilizar essas anotações é necessário importar
[Link] e
[Link], respectivamente.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 79/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Definindo um Conjunto de Teste
Definindo um Conjunto de Teste (2)
Exemplo de criação de um conjunto de teste
([Link]) incluindo uma única classe:
1 import [Link];
2 import [Link];
3
4 @RunWith([Link])
5 @[Link]({
6 [Link],
7 // Incluir outras classes de teste aqui.
8 })
9
10 public class TodosTestes {
11 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 80/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Definindo um Conjunto de Teste
Definindo um Conjunto de Teste (3)
A execução de TodosTestes invoca a classe de teste
IdentifierTestCase...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 81/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Executando os Teste sem o Eclipse
Executando os Teste sem o Eclipse
I Embora a execução dentro do IDE seja uma facilidade para o
desenvolvedor, em algumas ocasiões é melhor a execução fora
do ambiente interativo, por exemplo, para a execução via
scripts
I O JUnit oferece mais de uma opção para a execução dos
testes fora do IDE, dentre elas:
I Via Maven;
I Via executor do JUnit – [Link];
I Via executor personalizado – MyTestRunner, por exemplo.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 82/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Executando os Teste sem o Eclipse
Execução via Maven
I Executar o comando mvn test, a partir do diretório no qual
o arquivo [Link] se encontra.
I d e n t i f i e r $ mvn t e s t
[ INFO ] S c a n n i n g f o r p r o j e c t s . . .
[ INFO ] −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[ INFO ] B u i l d i n g I d e n t i f i e r
[ INFO ] t a s k−se gment : [ t e s t ]
[ INFO ] −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
...
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
T E S T S
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Runni ng I d e n t i f i e r T e s t C a s e
T e s t s r u n : 6 , F a i l u r e s : 0 , E r r o r s : 0 , S k i p p e d : 1 , Time e l a p s e d : 0 . 049 s e c
Runni ng P a r a m e t e r i z e d T e s t C a s e
T e s t s r u n : 3 , F a i l u r e s : 0 , E r r o r s : 0 , S k i p p e d : 0 , Time e l a p s e d : 0 . 006 s e c
Results :
Tests run : 9 , F a i l u r e s : 0 , E r r o r s : 0 , Skipped : 1
[ INFO ] −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[ INFO ] BUILD SUCCESSFUL
Vincenzi, Delamaro
[ INFO ] −−−&−− Maldonado
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[ INFO ] T o t a l t i m e : 1 s e c o n d
JUnit 4.11 83/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Executando os Teste sem o Eclipse
Execução via JUnitCore
I A partir do diretório no qual o arquivo [Link] se encontra,
execute:
I d e n t i f i e r $ j a v a −cp t a r g e t / I d e n t i f i e r −1. 0 . j a r : t a r g e t / t e s t −c l a s s e s : \
> . . / . . / f e r r a m e n t a s / j u n i t 4 . 11/ j u n i t −4. 11 . j a r : \
> . . / . . / f e r r a m e n t a s / j u n i t 4 . 11/ h a m c r e s t−c o r e −1. 3 . j a r \
> org . j u n i t . runner . JUnitCore TodosTestes
J U n i t v e r s i o n 4 . 11
I........
Time : 0 , 0 1 1
OK ( 8 t e s t s )
I O JUnitCore recebe de parâmetro o nome da(s) classe(s)
de teste que se deseja executar
I Observe, nesse caso, a necessidade de indicar para a máquina
virtual Java a localização dos diretórios onde se encontram as
classes
Vincenzi, Delamaro da aplicação e de teste, além das bibliotecas do JUnit
& Maldonado
JUnit 4.11 ([Link] e [Link]). 84/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Executando os Teste sem o Eclipse
Execução via MyTestRunner (1)
I É possı́vel ainda construir um executor personalizado:
1 import [Link];
2 import [Link];
3 import [Link];
4
5 public class MyTestRunner {
6 public static void main(String[] args) {
7 Result result = [Link]([Link]);
8
9 [Link]([Link]() + " tests run on "
10 + [Link]() + "ms");
11 [Link]("Ignored tests: " + [Link]());
12 [Link]("Failures detected: " + [Link]().size());
13 for (Failure failure : [Link]()) {
14 [Link]([Link]());
15 }
16 }
17 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 85/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Executando os Teste sem o Eclipse
Execução via MyTestRunner (2)
I A partir do diretório no qual o arquivo [Link] se encontra,
execute:
I d e n t i f i e r $ j a v a −cp t a r g e t / I d e n t i f i e r −1. 0 . j a r : t a r g e t / t e s t −c l a s s e s : \
. . / . . / f e r r a m e n t a s / j u n i t 4 . 11/ j u n i t −4. 11 . j a r : \
. . / . . / f e r r a m e n t a s / j u n i t 4 . 11/ h a m c r e s t−c o r e −1. 3 . j a r \
MyTestRunner
8 t e s t s r u n on 9ms
Ignored tests : 1
Failures detected : 0
I Novamente, nesse caso, a necessidade de indicar para a
máquina virtual Java a localização dos diretórios onde se
encontram as classes da aplicação e de teste, além das
bibliotecas do JUnit ([Link] e
[Link]).
Vincenzi, Delamaro & Maldonado
JUnit 4.11 86/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Ignorando Casos de Teste
Ignorando Casos de Teste (1)
I Existem situações que requerem que algum caso de teste deixe
de ser executado:
I Caso de teste incompleto.
I Caso de teste toma muito tempo da execução.
I O recurso exigido pelo caso de teste ainda não se encontra
disponı́vel.
I O caso de teste está acusando uma falha que ainda não será
corrigida.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 87/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Ignorando Casos de Teste
Ignorando Casos de Teste (2)
I Remover a anotação @Test do método de teste.
I Comentar o método de teste.
I Excluir o método de teste da classe de teste.
Embora funcionem, o executor de casos de teste deixará de
reportar a existência de tais testes.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 88/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Ignorando Casos de Teste
Ignorando Casos de Teste (3)
I Na versão 4.x é possı́vel simplesmente ignorar um caso de
teste.
I Uso da anotação @Ignore ou
@Ignore(‘‘Mensagem’’):
54 @Ignore
55 @Test(expected = [Link])
56 public void excecaoString() {
57 String str = new String("Exemplo JUnit");
58 [Link](30);
59 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 89/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Ignorando Casos de Teste
Ignorando Casos de Teste (4)
Saı́da produzida:
Vincenzi, Delamaro & Maldonado
JUnit 4.11 90/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Testes Parametrizados (1)
I Considere os casos de teste abaixo:
31 @Test(timeout = LIMIT)
32 public void validate03() {
33
boolean obtido;
34 obtido =
17 @Test(timeout = LIMIT)
35 [Link]("A1b2C3d");
18 public void validate01() {
36 assertEquals(false, obtido);
19 boolean obtido;
37 }
20 obtido = [Link]("a1");
38
21 assertEquals(true, obtido);
39 @Test(timeout = LIMIT)
22 }
40 public void validate04() {
23 41 boolean obtido;
24 @Test(timeout = LIMIT)
42 obtido = [Link]("2B3");
25 public void validate02() {
43 assertEquals(false, obtido);
26 boolean obtido;
44 }
27 obtido = [Link]("");
45
28 assertEquals(false, obtido);
46 @Test(timeout = LIMIT)
29 47 public void validate05() {
}
48 boolean obtido;
49 obtido =
50 [Link]("Z#12");
51 assertEquals(false, obtido);
52
}
I O que eles possuem em comum?
Vincenzi, Delamaro & Maldonado
JUnit 4.11 91/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Testes Parametrizados (2)
I Todos testam o mesmo método validateIdentifier.
I Possuem uma estrutura bastante semelhante.
I Variam o parâmetro fornecido ao validateIdentifier e
o valor esperado.
I Em situações como essa é possı́vel definir um conjunto de
teste parametrizado.
I Basicamente isso significa:
I Criar uma coleção com valores de parâmetros e saı́das
esperadas.
I Definir a estrutura do método a ser testado em função dos
valores da coleção.
I Duas anotações especiais são utilizadas:
@RunWith([Link]) e @Parameters.
Vincenzi, Delamaro & Maldonado
JUnit 4.11 92/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Testes Parametrizados (3)
1 import static [Link].*;
2 import [Link];
3
import [Link];
4 import [Link];
5 import [Link];
29 String param, boolean result) {
6 import [Link];
30 [Link] = param;
7 31 [Link] = result;
8 import [Link];
32 }
9 import [Link];
33
10 34 @Before
11 @RunWith([Link])
35 public void inicializa() {
12 public class ParameterizedTestCase {
36 id = new Identifier();
13 37 }
14 private Identifier id = new Identifier();
38
15 39 @Test(timeout = 200)
16 private String param;
40 public void validate() {
17 private boolean result;
41 boolean value =
18 42 [Link](param);
19 @Parameters
43 assertEquals(result, value);
20 public static Collection<Object[]> data() {
44 }
21 return [Link](new Object[][] {
45
}
22 { "Abcd5", true },
23 { "&123", false },
24 { "Inv@lido", false }
25 });
26
}
Vincenzi, Delamaro & Maldonado
JUnit 4.11 93/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Atualizando TodosTestes (1)
1 import [Link];
2 import [Link];
3
4 @RunWith([Link])
5 @[Link]({
6 [Link],
7 [Link],
8 // Incluir outras classes de teste aqui.
9 })
10
11 public class TodosTestes {
12 }
Vincenzi, Delamaro & Maldonado
JUnit 4.11 94/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Atualizando TodosTestes (2)
A execução de TodosTestes invoca as classes de teste
IdentifierTestCase e ParameterizedTestCase...
Vincenzi, Delamaro & Maldonado
JUnit 4.11 95/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Testes Parametrizados
Outros Recursos para Pesquisar
I Para mais informações sobre as novidades do JUnit consulte o
Sumário de Mudanças da versão 4.11
I Algumas delas não abordadas nesse treinamento são:
I Definindo a ordem de execução dos testes:
@FixMethodOrder (mais informação aqui e aqui)
I Melhorando a identificação de teste parametrizados:
@Parameters (mais informação aqui e aqui)
I Declaração de suposições sobre as condições para o teste ter
significado: Assume (mais informação aqui)
I Definição de regras: @Rule e @RuleClass (mais informação
aqui)
Vincenzi, Delamaro & Maldonado
JUnit 4.11 96/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 97/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Ferramentas Similares
I JUnit não é a única ferramenta de apoio à documentação e
execução automática de casos de teste.
I Considerando as linguagens de programação mais populares,
existem outras ferramentas similares, tais como:
ITestNG ([Link] para Java.
IDUnit ([Link] para Delphi.
I cUnit ([Link]
para C.
I Jeté ([Link] teste de
integração para Java.
I Dentre outras...
I Uma extensa lista pode ser encontrada em
[Link] e
[Link]
Vincenzi, Delamaro & Maldonado
JUnit 4.11 98/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Introdução
Histórico
Pré-requisitos
JUnit Básico
Instalação
O Framework
O Exemplo
Compilando e Executando via Linha de Comando
Projeto Maven no Eclipse
Copiando a Aplicação para o Projeto
Entendendo o Código
Criando Casos de Teste
Encontrando uma Falha e Corrigindo o Defeito
Métodos Especiais
JUnit Avançado
Temporização em Casos de Teste
Teste de Exceções
Definindo um Conjunto de Teste
Executando os Teste sem o Eclipse
Ignorando Casos de Teste
Testes Parametrizados
Ferramentas Similares
Referências
Vincenzi, Delamaro & Maldonado
JUnit 4.11 99/100
Organização Introdução JUnit Básico O Exemplo JUnit Avançado Ferramentas Similares Referências
Referências
I JUnit Homepage: package, documentation and extensions –
[Link]
I JUnit Start Guide – [Link]
JUnit/[Link]
I Harold, E. “An early look at JUnit 4”. Artigo On-line, Setembro, 2005.
Disponı́vel em: http:
//[Link]/developerworks/java/library/[Link].
Acesso em: 22/11/2006.
I Gonçaves, A. “Get Acquainted with the New Advanced Features of JUnit 4”.
Artigo On-line, Julho, 2006. Disponı́vel em:
[Link] Acesso em: 11/22/2006.
I Open Source Java Developer Testing Tools – Coletânea de endereços para
várias ferramentas de teste de código livre (não somente para programas Java) –
[Link]
I Software Testing FAQs – Coletânea de endereços para várias ferramentas de
teste – [Link]
I Open Source Testing Tools in Java –
[Link]
Vincenzi, Delamaro & Maldonado
JUnit 4.11 100/100