SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PPT
PDF
Testes de Unidade com JUnit
PDF
Palestra Testes Unidade Com JUnit
PDF
Desenvolvimento Dirigido por Testes com Junit
PPTX
Introdução a testes unitários com jUnit
PDF
Palestra Testes De Unidade Com JUnit
Testes de Unidade com JUnit
Palestra Testes Unidade Com JUnit
Desenvolvimento Dirigido por Testes com Junit
Introdução a testes unitários com jUnit
Palestra Testes De Unidade Com JUnit

Mais procurados (20)

PDF
Implementando Testes Unitários em Java - Manoel Pimentel
PPTX
Testes Unitários
PPT
Treinamento Testes Unitários - parte 1
PDF
Aexo TI - Boas práticas de testes tdd
PPTX
Introdução a tdd
PPT
Introdução a testes unitários automatizados com JUnit e NUnit
DOC
Testes de Sistema
PDF
Testes de Unidade com Junit
PDF
TDD com Python
PPTX
Apresentacao Testes de Unidade
PDF
TDD com Python (Completo)
PDF
JUnit: framework de testes unitários
PPTX
TDD (Resumo)
PPTX
Testes Unitários/Integrados
PDF
Android: testes automatizados e TDD
PDF
J unit xp
PPT
Testes com JUnit
PDF
Testando Aplicações Django: Quando, Como e Onde?
PPTX
Test-Driven Development (TDD) utilizando o framework xUnit.net
PDF
Testes de unidade e TDD SoLiSC 2011
Implementando Testes Unitários em Java - Manoel Pimentel
Testes Unitários
Treinamento Testes Unitários - parte 1
Aexo TI - Boas práticas de testes tdd
Introdução a tdd
Introdução a testes unitários automatizados com JUnit e NUnit
Testes de Sistema
Testes de Unidade com Junit
TDD com Python
Apresentacao Testes de Unidade
TDD com Python (Completo)
JUnit: framework de testes unitários
TDD (Resumo)
Testes Unitários/Integrados
Android: testes automatizados e TDD
J unit xp
Testes com JUnit
Testando Aplicações Django: Quando, Como e Onde?
Test-Driven Development (TDD) utilizando o framework xUnit.net
Testes de unidade e TDD SoLiSC 2011
Anúncio

Semelhante a Junit 4.0 (20)

PDF
Testes de Unidade com JUnit
PPTX
Pensando em java univali turbinando seus testes
PDF
Escrevendo testes j unit no net beans ide
PPTX
1 2 3 - Testando - Automatizando os testes de software
PDF
Testes de unidade em Java: JUnit
PPT
Ferramentas testes2003
PDF
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
PDF
JUnit Experience
PDF
Não tem teste ? Já nasceu legado.
KEY
Android testing PT-BR
PPTX
Como escrever bons testes! - Dex transforming days
PPT
Palestra Ministrada no 3 Encontro do GTS-CE
PPTX
TDD Primeiro Contato
PPTX
Testes Unitários
PDF
Testes de performance com JUnitPerf
ODP
Palestra Mocks - AgileBrazil 2010
PDF
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
PDF
Testes de Integração
PPTX
BDD (Behavior-Driven Development)
PPT
Importância do Teste Unitário na Qualidade do Software
Testes de Unidade com JUnit
Pensando em java univali turbinando seus testes
Escrevendo testes j unit no net beans ide
1 2 3 - Testando - Automatizando os testes de software
Testes de unidade em Java: JUnit
Ferramentas testes2003
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
JUnit Experience
Não tem teste ? Já nasceu legado.
Android testing PT-BR
Como escrever bons testes! - Dex transforming days
Palestra Ministrada no 3 Encontro do GTS-CE
TDD Primeiro Contato
Testes Unitários
Testes de performance com JUnitPerf
Palestra Mocks - AgileBrazil 2010
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Testes de Integração
BDD (Behavior-Driven Development)
Importância do Teste Unitário na Qualidade do Software
Anúncio

Mais de elliando dias (20)

PDF
Clojurescript slides
PDF
Why you should be excited about ClojureScript
PDF
Functional Programming with Immutable Data Structures
PPT
Nomenclatura e peças de container
PDF
Geometria Projetiva
PDF
Polyglot and Poly-paradigm Programming for Better Agility
PDF
Javascript Libraries
PDF
How to Make an Eight Bit Computer and Save the World!
PDF
Ragel talk
PDF
A Practical Guide to Connecting Hardware to the Web
PDF
Introdução ao Arduino
PDF
Minicurso arduino
PDF
Incanter Data Sorcery
PDF
PDF
Fab.in.a.box - Fab Academy: Machine Design
PDF
The Digital Revolution: Machines that makes
PDF
Hadoop + Clojure
PDF
Hadoop - Simple. Scalable.
PDF
Hadoop and Hive Development at Facebook
PDF
Multi-core Parallelization in Clojure - a Case Study
Clojurescript slides
Why you should be excited about ClojureScript
Functional Programming with Immutable Data Structures
Nomenclatura e peças de container
Geometria Projetiva
Polyglot and Poly-paradigm Programming for Better Agility
Javascript Libraries
How to Make an Eight Bit Computer and Save the World!
Ragel talk
A Practical Guide to Connecting Hardware to the Web
Introdução ao Arduino
Minicurso arduino
Incanter Data Sorcery
Fab.in.a.box - Fab Academy: Machine Design
The Digital Revolution: Machines that makes
Hadoop + Clojure
Hadoop - Simple. Scalable.
Hadoop and Hive Development at Facebook
Multi-core Parallelization in Clojure - a Case Study

Último (19)

PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula04-Academia Heri- Tecnologia Geral 2025
COBITxITIL-Entenda as diferença em uso governança TI
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Apple Pippin Uma breve introdução. - David Glotz
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Processos na gestão de transportes, TM100 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Custos e liquidação no SAP Transportation Management, TM130 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula 18 - Manipulacao De Arquivos python
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Otimizador de planejamento e execução no SAP Transportation Management, TM120...

Junit 4.0

  • 1. Junit 4.0 Daniel Cukier – IME – USP [email_address] MAC5700
  • 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. 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. 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
  • 5. Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void setUp () { novelas = new ArquivoDeNovelas(); } public void tearDown () { novelas = null; } }
  • 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. 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
  • 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. 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. 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. 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. 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. 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. 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. Outras Funcionalidades @Ignore – Para desabilitar temporariamente um teste assertEquals(Object[] expected, Object[] actual) – compara elemento a elemento
  • 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. 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. 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. 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. 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. 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