Title: Junit 4.0
1Junit 4.0
- Daniel Cukier IME USP
- danicuki_at_mandic.com.br
- MAC5700
2Conteúdo
- Sobre o JUnit
- Migrando do Junit 3 para 4
- Novidades da nova versão
- Testes de Tempo e performance
- J2MEUnit
- Outros arcabouços
3Sobre o JUnit
- Arcabouço para testes de unidades pequenos
testes para as várias partes (módulos, métodos,
classes, etc) de um sistema - Usado fortemente em XP, TDD e outros métodos
ágeis - Código fonte livre
- Testes de unidades mostram a presença de erros,
não a auência deles
4Velho JUnit
import junit.framework.TestCase public class
NovelaTest extends TestCase public void
testNovelaExiste() ArquivoDeNovelas
novelas new ArquivoDeNovelas() assertEqual
s("Arquivo deve possuir Sassaricando", true,
novelas .possuiNovela("Sassaricando"))
reflexão
métodos da classe TestCase
5Velho JUnit
import junit.framework.TestCase public class
NovelaTest extends TestCase public void
setUp() novelas new ArquivoDeNovelas()
public void tearDown() novelas
null
6Migrando para Junit 4.0
import junit.framework.JUnit4TestAdapter import
org.junit.Test import static org.junit.Assert.ass
ertEquals public class NovelaNovoTest _at_Test
public void novelaJaTerminou() ArquivoDeNovel
as novelas new ArquivoDeNovelas() assertEqual
s("Arquivo deve possuir Sassaricando", true,
novelas .possuiNovela("Sassaricando"))
public static junit.framework.Test
suite() return new JUnit4TestAdapter(NovelaNovo
Test.class)
não é subclasse de TestCase classe normal
não começa com test
7Migrando para Junit 4.0
import junit.framework.JUnit4TestAdapter import
org.junit.Test import static org.junit.Assert.ass
ertEquals public class NovelaNovoTest _at_Test
public void novelaJaTerminou() ArquivoDeNovel
as novelas new ArquivoDeNovelas() assertEqual
s("Arquivo deve possuir Sassaricando", true,
novelas .possuiNovela("Sassaricando"))
public static junit.framework.Test
suite() return new JUnit4TestAdapter(NovelaNovo
Test.class)
Importa JUnit4TestAdapter
Importa Test Annotation
Importa método de classe
Todos os testes são anotado com _at_Test
Usado para rodar usando JUnit runner antigo
8Executando os testes
- A maioria dos ambientes de desenvolvimento ainda
não suportam Junit 4 - JUnit4Adapter permite rodar testes do JUnit 4
nesses ambientes, usando o método suite() - Rodar via linha de comando
- java org.junit.runner.JUnitCore LibraryTest
9Antes e Depois de Cada Teste
import org.junit.After import org.junit.Before i
mport org.junit.Test import static
org.junit.Assert.assertEquals public class
NovelaNovoTest private ArquivoDeNovelas
novelas _at_Before public void
rodaAntesDeCadaTeste() novelas new
ArquivoDeNovelas() _at_After public void
rodaDepoisDeCadaTeste() novelas
null _at_Test public void testNovelaExiste()
assertEquals("Arquivo deve possuir
Sassaricando", true, novelas .possuiNovela("Sa
ssaricando"))
10Antes e Depois de Cada Teste
- É possível ter quantos métodos _at_Before e _at_After
quiser - Métodos _at_Before e _at_After são herdados das
superclasses. Métodos _at_Before das superclasses
são executados antes dos métodos _at_Before da
subclasse. Métodos _at_After das superclasses são
executados depois. - Objetivo agrupar código comum a vários testes
11Antes e Depois da Classe de Testes
_at_BeforeClass public void rodaAntesDeTodosOsTeste
s() novelas new ArquivoDeNovelas() novela
s.carregaDadosDaRede() _at_AfterClass public
void rodaDepoisDeTodosOsTestes() novelas
null
Processamento pesado!
- Somente um método por classe
- Bom para inicializações demoradas
12Exceções Esperadas
_at_Test public void testDivisaoPorZero() try
int n 2 / 0 fail("Dividiu por
zero!") catch (ArithmeticException
success) assertNotNull(success.getMessag
e())
ANTES
_at_Test(expectedArithmeticException.class)
public void testDivisaoPorZero () int n 2
/ 0
JUnit 4
- Se exceção não for gerada, teste falha
13Teste de tempo
_at_Test(timeout500) public void buscaTodasAsNovelas
() novelas.buscaTodas()
- Teste falha se demorar mais do que timeout
- Útil para testes de redes e conexões com bancos
de dados - Detalhe _at_After não é executado caso falhe!
14Teste de Tempo
- Aplicações modernas existem tempo de resposta
máximo. - O tempo de resposta pode mudar na medida em que o
sistema evolui - Testes de tempo garantem que o tempo de resposta
máximo seja satisfeito, mesmo que o sistema se
torne mais complexo - O sistema cresce em funcionalidades sem perder
performance!
15Outras Funcionalidades
- _at_Ignore Para desabilitar temporariamente um
teste - assertEquals(Object expected, Object actual)
compara elemento a elemento
16Resumo
- Precisa do JDK 5 para rodar
- Classes de teste não são subclasses de TestCase
- Métodos não começam com test
- Métodos de asserção de classe
- _at_Test para anotar um teste
- _at_Before e _at_After para rodar antes e depois de
cada teste. - _at_Test recebe parâmetro de timeout
17Resumo
- _at_Test recebe parâmentro de excessão esperada
- JUnit4Adapter permite rodar JUnit 4 nos runners
antigos. - Testes do JUnit antigo rodam normalmente no JUnit
4
18J2MEUnit
- J2ME não possui reflexão, muito menos anotações!
- Recursos limitados
public Test suite() TestSuite suite new
TestSuite("testes paciente DAO")
suite.addTest(new InfoPacienteDAOTest("Teste
adiciona Paciente", new TestMethod()
public void run(TestCase tc) throws Exception
((InfoPacienteDAOTest) tc).testAddInfoPacien
te() ))
Adicionando métodos
19J2MEUnit
imports public class BorboletaTestRunner
extends TestRunner public BorboletaTestRunner(
) super() protected void startApp()
start(new String InfoPacienteDAOTest.class
.getName(), FormPacienteTest.class.getName(),
ExportPacienteTest.class.getName(), Import
PacienteTest.class.getName() )
Array de strings com nome de classes de teste
20Outros Arcabouços Unit
- SQLUnit testes para Stored Procedures
(http//sqlunit.sourceforge.net/) - JPDFUnit testa documentos PDF gerados
dinamicamente (http//jpdfunit.sourceforge.net/) - XMLUnit teste para arquivos XML
(http//xmlunit.sourceforge.net/) - Watij teste de aplicações Web em java
(http//watij.xwiki.com/xwiki/bin/view/Main/WebHom
e)
21Referências
- http//www-128.ibm.com/developerworks/java/library
/j-junit4.html - http//www.instrumentalservices.com/media/articles
/java/junit4/JUnit4.pdf - http//junit.sourceforge.net/doc/cookbook/cookbook
.htm - http//j2meunit.sourceforge.net/doc.html
- http//www.junit.org/
- http//en.wikipedia.org/wiki/Unit_test