A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Daniel Cukier – IME - USP 1 Junit 4.0 Daniel Cukier – IME – USP MAC5700.

Apresentações semelhantes


Apresentação em tema: "Daniel Cukier – IME - USP 1 Junit 4.0 Daniel Cukier – IME – USP MAC5700."— Transcrição da apresentação:

1 Daniel Cukier – IME - USP 1 Junit 4.0 Daniel Cukier – IME – USP danicuki@mandic.com.br MAC5700

2 Daniel Cukier – IME - USP 2 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

3 Daniel Cukier – IME - USP 3 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

4 Daniel Cukier – IME - USP 4 Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void testNovelaExiste() { ArquivoDeNovelas novelas = new ArquivoDeNovelas(); assertEquals("Arquivo deve possuir Sassaricando", true, novelas.possuiNovela("Sassaricando")) } métodos da classe TestCase reflexão

5 Daniel Cukier – IME - USP 5 Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void setUp() { novelas = new ArquivoDeNovelas(); } public void tearDown() { novelas = null; }

6 Daniel Cukier – IME - USP 6 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’

7 Daniel Cukier – IME - USP 7 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); } Migrando para Junit 4.0 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

8 Daniel Cukier – IME - USP 8 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

9 Daniel Cukier – IME - USP 9 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")); }

10 Daniel Cukier – IME - USP 10 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

11 Daniel Cukier – IME - USP 11 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!

12 Daniel Cukier – IME - USP 12 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

13 Daniel Cukier – IME - USP 13 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(); }

14 Daniel Cukier – IME - USP 14 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!

15 Daniel Cukier – IME - USP 15 Outras Funcionalidades ● @Ignore – Para desabilitar temporariamente um teste ● assertEquals(Object[] expected, Object[] actual) – compara elemento a elemento

16 Daniel Cukier – IME - USP 16 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

17 Daniel Cukier – IME - USP 17 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

18 Daniel Cukier – IME - USP 18 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

19 Daniel Cukier – IME - USP 19 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

20 Daniel Cukier – IME - USP 20 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)

21 Daniel Cukier – IME - USP 21 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


Carregar ppt "Daniel Cukier – IME - USP 1 Junit 4.0 Daniel Cukier – IME – USP MAC5700."

Apresentações semelhantes


Anúncios Google