Upload
alana-reposa
View
222
Download
0
Embed Size (px)
Citation preview
Daniel Cukier – IME - USP2
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
Daniel Cukier – IME - USP3
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
Daniel Cukier – IME - USP4
Velho JUnitimport 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
Daniel Cukier – IME - USP5
Velho JUnitimport junit.framework.TestCase;
public class NovelaTest extends TestCase {
public void setUp() {novelas = new ArquivoDeNovelas();
}
public void tearDown() {novelas = null;
}
}
Daniel Cukier – IME - USP6
Migrando para Junit 4.0import 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’
Daniel Cukier – IME - USP7
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.0Importa Test Annotation
Todos os testes são anotado com @Test
Importa método de classe
Importa JUnit4TestAdapter
Usado para rodar usando JUnit runner antigo
Daniel Cukier – IME - USP8
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
Daniel Cukier – IME - USP9
Antes e Depois de Cada Testeimport org.junit.After;import org.junit.Before;import org.junit.Test;import static org.junit.Assert.assertEquals;
public class NovelaNovoTest {private ArquivoDeNovelas novelas;
@Beforepublic void rodaAntesDeCadaTeste() {
novelas = new ArquivoDeNovelas();}
@Afterpublic void rodaDepoisDeCadaTeste() {
novelas = null;}
@Testpublic void testNovelaExiste() {
assertEquals("Arquivo deve possuir Sassaricando", true, novelas .possuiNovela("Sassaricando"));
}}
Daniel Cukier – IME - USP10
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
Daniel Cukier – IME - USP11
Antes e Depois da Classe de Testes
● Somente um método por classe● Bom para inicializações demoradas
@BeforeClasspublic void rodaAntesDeTodosOsTestes() {
novelas = new ArquivoDeNovelas();novelas.carregaDadosDaRede();
}
@AfterClasspublic void rodaDepoisDeTodosOsTestes() {
novelas = null;}
Processamento pesado!
Daniel Cukier – IME - USP12
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
Daniel Cukier – IME - USP13
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();}
Daniel Cukier – IME - USP14
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!
Daniel Cukier – IME - USP15
Outras Funcionalidades● @Ignore – Para desabilitar
temporariamente um teste● assertEquals(Object[] expected,
Object[] actual) – compara elemento a elemento
Daniel Cukier – IME - USP16
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
Daniel Cukier – IME - USP17
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
Daniel Cukier – IME - USP18
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
Daniel Cukier – IME - USP19
J2MEUnitimports …
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
Daniel Cukier – IME - USP20
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)
Daniel Cukier – IME - USP21
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