Your SlideShare is downloading. ×
0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Junit 4.0
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Junit 4.0

3,091

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,091
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
147
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Junit 4.0 Daniel Cukier – IME – USP [email_address] MAC5700
  • 2. Conteúdo <ul><li>Sobre o JUnit </li></ul><ul><li>Migrando do Junit 3 para 4 </li></ul><ul><li>Novidades da nova versão </li></ul><ul><li>Testes de Tempo e performance </li></ul><ul><li>J2MEUnit </li></ul><ul><li>Outros arcabouços </li></ul>
  • 3. Sobre o JUnit <ul><li>Arcabouço para testes de unidades – pequenos testes para as várias partes (módulos, métodos, classes, etc) de um sistema </li></ul><ul><li>Usado fortemente em XP, TDD e outros métodos ágeis </li></ul><ul><li>Código fonte livre </li></ul><ul><li>Testes de unidades mostram a presença de erros, não a auência deles </li></ul>
  • 4. Velho JUnit import junit.framework.TestCase; public class NovelaTest extends TestCase { public void test NovelaExiste() { ArquivoDeNovelas novelas = new ArquivoDeNovelas(); assertEquals (&quot;Arquivo deve possuir Sassaricando&quot;, true, novelas .possuiNovela(&quot;Sassaricando&quot;)) } } 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(&quot;Arquivo deve possuir Sassaricando&quot;, true, novelas .possuiNovela(&quot;Sassaricando&quot;)); } 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(&quot;Arquivo deve possuir Sassaricando&quot;, true, novelas .possuiNovela(&quot;Sassaricando&quot;)); } 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 <ul><li>A maioria dos ambientes de desenvolvimento ainda não suportam Junit 4 </li></ul><ul><li>JUnit4Adapter permite rodar testes do JUnit 4 nesses ambientes, usando o método suite() </li></ul><ul><li>Rodar via linha de comando: </li></ul><ul><li>java org.junit.runner.JUnitCore LibraryTest </li></ul>
  • 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(&quot;Arquivo deve possuir Sassaricando&quot;, true, novelas .possuiNovela(&quot;Sassaricando&quot;)); } }
  • 10. Antes e Depois de Cada Teste <ul><li>É possível ter quantos métodos @Before e @After quiser </li></ul><ul><li>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. </li></ul><ul><li>Objetivo: agrupar código comum a vários testes </li></ul>
  • 11. Antes e Depois da Classe de Testes <ul><li>Somente um método por classe </li></ul><ul><li>Bom para inicializações demoradas </li></ul>@BeforeClass public void rodaAntesDeTodosOsTestes() { novelas = new ArquivoDeNovelas(); novelas.carregaDadosDaRede(); } @AfterClass public void rodaDepoisDeTodosOsTestes() { novelas = null; } Processamento pesado!
  • 12. Exceções Esperadas <ul><li>Se exceção não for gerada, teste falha </li></ul>@Test public void testDivisaoPorZero() { try { int n = 2 / 0; fail(&quot;Dividiu por zero!&quot;); } catch (ArithmeticException success) { assertNotNull(success.getMessage()); } } @Test(expected=ArithmeticException.class) public void testDivisaoPorZero () { int n = 2 / 0; } ANTES JUnit 4
  • 13. Teste de tempo <ul><li>Teste falha se demorar mais do que timeout </li></ul><ul><li>Útil para testes de redes e conexões com bancos de dados </li></ul><ul><li>Detalhe: @After não é executado caso falhe! </li></ul>@Test( timeout=500 ) public void buscaTodasAsNovelas(){ novelas.buscaTodas(); }
  • 14. Teste de Tempo <ul><li>Aplicações modernas existem tempo de resposta máximo. </li></ul><ul><li>O tempo de resposta pode mudar na medida em que o sistema evolui </li></ul><ul><li>Testes de tempo garantem que o tempo de resposta máximo seja satisfeito, mesmo que o sistema se torne mais complexo </li></ul><ul><li>O sistema cresce em funcionalidades sem perder performance! </li></ul>
  • 15. Outras Funcionalidades <ul><li>@Ignore – Para desabilitar temporariamente um teste </li></ul><ul><li>assertEquals(Object[] expected, Object[] actual) – compara elemento a elemento </li></ul>
  • 16. Resumo <ul><li>Precisa do JDK 5 para rodar </li></ul><ul><li>Classes de teste não são subclasses de TestCase </li></ul><ul><li>Métodos não começam com ‘test’ </li></ul><ul><li>Métodos de asserção de classe </li></ul><ul><li>@Test para anotar um teste </li></ul><ul><li>@Before e @After para rodar antes e depois de cada teste. </li></ul><ul><li>@Test recebe parâmetro de timeout </li></ul>
  • 17. Resumo <ul><li>@Test recebe parâmentro de excessão esperada </li></ul><ul><li>JUnit4Adapter permite rodar JUnit 4 nos runners antigos. </li></ul><ul><li>Testes do JUnit antigo rodam normalmente no JUnit 4 </li></ul>
  • 18. J2MEUnit <ul><li>J2ME não possui reflexão, muito menos anotações! </li></ul><ul><li>Recursos limitados </li></ul>public Test suite() { TestSuite suite = new TestSuite(&quot;testes paciente DAO&quot;); suite.addTest(new InfoPacienteDAOTest(&quot;Teste adiciona Paciente&quot;, 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 <ul><li>SQLUnit – testes para Stored Procedures (http://sqlunit.sourceforge.net/) </li></ul><ul><li>JPDFUnit – testa documentos PDF gerados dinamicamente (http://jpdfunit.sourceforge.net/) </li></ul><ul><li>XMLUnit – teste para arquivos XML (http://xmlunit.sourceforge.net/) </li></ul><ul><li>Watij – teste de aplicações Web em java (http://watij.xwiki.com/xwiki/bin/view/Main/WebHome) </li></ul>
  • 21. Referências <ul><li>http://www-128.ibm.com/developerworks/java/library/j-junit4.html </li></ul><ul><li>http://www.instrumentalservices.com/media/articles/java/junit4/JUnit4.pdf </li></ul><ul><li>http://junit.sourceforge.net/doc/cookbook/cookbook.htm </li></ul><ul><li>http://j2meunit.sourceforge.net/doc.html </li></ul><ul><li>http://www.junit.org/ </li></ul><ul><li>http://en.wikipedia.org/wiki/Unit_test </li></ul>

×