• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Junit 4.0
 

Junit 4.0

on

  • 4,179 views

 

Statistics

Views

Total Views
4,179
Views on SlideShare
4,163
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