Junit 4.0
Upcoming SlideShare
Loading in...5
×
 

Junit 4.0

on

  • 4,257 views

 

Statistics

Views

Total Views
4,257
Views on SlideShare
4,241
Embed Views
16

Actions

Likes
1
Downloads
145
Comments
0

1 Embed 16

http://www.slideshare.net 16

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Junit 4.0 Junit 4.0 Presentation Transcript

  • Junit 4.0 Daniel Cukier – IME – USP [email_address] MAC5700
  • Conteúdo
    • Sobre o JUnit
    • Migrando do Junit 3 para 4
    • Novidades da nova versão
    • Testes de Tempo e performance
    • J2MEUnit
    • Outros arcabouços
  • Sobre 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
  • Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void test NovelaExiste() { ArquivoDeNovelas novelas = new ArquivoDeNovelas(); assertEquals ("Arquivo deve possuir Sassaricando", true, novelas .possuiNovela("Sassaricando")) } } métodos da classe TestCase reflexão
  • Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void setUp () { novelas = new ArquivoDeNovelas(); } public void tearDown () { novelas = null; } }
  • Migrando para Junit 4.0 import junit.framework.JUnit4TestAdapter; import org.junit.Test; import static org.junit.Assert.assertEquals; public class NovelaNovoTest { @Test public void novelaJaTerminou() { ArquivoDeNovelas novelas = new ArquivoDeNovelas(); assertEquals("Arquivo deve possuir Sassaricando", true, novelas .possuiNovela("Sassaricando")); } public static junit.framework.Test suite(){ return new JUnit4TestAdapter(NovelaNovoTest.class); } } não é subclasse de TestCase – classe normal não começa com ‘test’
  • Migrando para Junit 4.0 import junit.framework.JUnit4TestAdapter; import org.junit.Test; import static org.junit.Assert.assertEquals; public class NovelaNovoTest { @Test public void novelaJaTerminou() { ArquivoDeNovelas novelas = new ArquivoDeNovelas(); assertEquals("Arquivo deve possuir Sassaricando", true, novelas .possuiNovela("Sassaricando")); } public static junit.framework.Test suite(){ return new JUnit4TestAdapter(NovelaNovoTest.class); } } Importa Test Annotation Todos os testes são anotado com @Test Importa método de classe Importa JUnit4TestAdapter Usado para rodar usando JUnit runner antigo
  • Executando 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
  • Antes e Depois de Cada Teste import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class NovelaNovoTest { private ArquivoDeNovelas novelas; @Before public void rodaAntesDeCadaTeste() { novelas = new ArquivoDeNovelas(); } @After public void rodaDepoisDeCadaTeste() { novelas = null; } @Test public void testNovelaExiste() { assertEquals("Arquivo deve possuir Sassaricando", true, novelas .possuiNovela("Sassaricando")); } }
  • Antes e Depois de Cada Teste
    • É possível ter quantos métodos @Before e @After quiser
    • Métodos @Before e @After são herdados das superclasses. Métodos @Before das superclasses são executados antes dos métodos @Before da subclasse. Métodos @After das superclasses são executados depois.
    • Objetivo: agrupar código comum a vários testes
  • Antes e Depois da Classe de Testes
    • Somente um método por classe
    • Bom para inicializações demoradas
    @BeforeClass public void rodaAntesDeTodosOsTestes() { novelas = new ArquivoDeNovelas(); novelas.carregaDadosDaRede(); } @AfterClass public void rodaDepoisDeTodosOsTestes() { novelas = null; } Processamento pesado!
  • Exceções Esperadas
    • Se exceção não for gerada, teste falha
    @Test public void testDivisaoPorZero() { try { int n = 2 / 0; fail("Dividiu por zero!"); } catch (ArithmeticException success) { assertNotNull(success.getMessage()); } } @Test(expected=ArithmeticException.class) public void testDivisaoPorZero () { int n = 2 / 0; } ANTES JUnit 4
  • Teste de tempo
    • Teste falha se demorar mais do que timeout
    • Útil para testes de redes e conexões com bancos de dados
    • Detalhe: @After não é executado caso falhe!
    @Test( timeout=500 ) public void buscaTodasAsNovelas(){ novelas.buscaTodas(); }
  • Teste 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!
  • Outras Funcionalidades
    • @Ignore – Para desabilitar temporariamente um teste
    • assertEquals(Object[] expected, Object[] actual) – compara elemento a elemento
  • Resumo
    • 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
    • @Test para anotar um teste
    • @Before e @After para rodar antes e depois de cada teste.
    • @Test recebe parâmetro de timeout
  • Resumo
    • @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
  • J2MEUnit
    • 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).testAddInfoPaciente(); } })); } Adicionando métodos
  • J2MEUnit imports … public class BorboletaTestRunner extends TestRunner { public BorboletaTestRunner() { super(); } protected void startApp () { start(new String[] { InfoPacienteDAOTest.class.getName(), FormPacienteTest.class.getName(), ExportPacienteTest.class.getName(), ImportPacienteTest.class.getName() }); } } Array de strings com nome de classes de teste
  • Outros 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/WebHome)
  • Referê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