j u nit um framework para testes. motivação todos os programadores sabem que devem testar seu...
TRANSCRIPT
![Page 1: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/1.jpg)
JUnitUm Framework Para Testes
![Page 2: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/2.jpg)
Motivação Todos os programadores sabem que devem
testar seu código Quanto mais curto o prazo menos testes são
realizados Necessidade de testar cada método
separadamente Centralizar o código de testes Regras já definidas para apresentação de
erros Possibilidade de automatização
![Page 3: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/3.jpg)
Testes em Software Revelam erros no código Garantem que a implementação respeita
a especificação Devem ser automatizados a fim de serem
facilmente executados sempre que necessário
Garantem a qualidade do software durante todo o ciclo de vida
![Page 4: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/4.jpg)
Testes Automatizados Avaliam se um programa funciona como
esperado Exemplo: main() Validam os requisitos
![Page 5: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/5.jpg)
Testes de Unidade Testam a aplicação em seus menores
componentes, isoladamente Testam unidades lógicas
Métodos Objetos
Maior número de erros detectados Erros mais fáceis de corrigir Devem ser executados continuamente
![Page 6: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/6.jpg)
Testes de Integração Testam como uma coleção de unidades
interage entre si ou com o ambiente onde executam
Executados continuamente (caso as unidades em desenvolvimento dependam de outras)
![Page 7: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/7.jpg)
Testes Funcionais Ponto de vista do usuário Testam casos de uso Validam a interface com o usuário, as
operações requisitadas, etc. São menos estáveis do que os outros
tipos
![Page 8: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/8.jpg)
JUnit Framework para facilitar o
desenvolvimento e a execução de testes de unidade em programas Java
Modelo de programação para a criação de testes de unidade
Sugerido por Kent Beck
![Page 9: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/9.jpg)
JUnit API para construir testes
junit.framework.*
Aplicações para executar testes TestRunner
![Page 10: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/10.jpg)
JUnit O framework JUnit pode ser resumido em
uma classe pai para todos os casos de teste (chamada TestCase) que fornece ferramentas para rodar testes, gerar relatórios e definir conjuntos de testes
![Page 11: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/11.jpg)
Escrevendo uma classe de testeAssuma uma classe Conta Para testar a classe definimos uma classe
ContaTest
import test.framework.TestCase;
public class ContaTest extends TestCase { public ContaTest(String testCase) { super(testCase); }}
![Page 12: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/12.jpg)
Escrevendo uma classe de teste Para testar o método getSaldo() definimos o
método testGetSaldo() na classe ContaTest;
public void testGetSaldo() { Conta c = new Conta(1, 100); assertTrue(c.getSaldo() == 100);}
Para cada método da classe Conta é definido um método na classe ContaTest
![Page 13: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/13.jpg)
Principais Asserções assertEquals(objEsperado, objRecebido); assertTrue(expBooleana); assertNull(obj); assertNotNull(obj) assertSame(obj1, obj2); fail(mensagem);
![Page 14: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/14.jpg)
Instalando e Rodando o JUnit www.junit.org Descompacte o arquivo junit3.8.1.zip. Baixe a classe Conta.java em
www.cin.ufpe.br/~abab/arquivos/junit Incluir o arquivo junit.jar no classpath Crie uma classe ContaTest que será o test
case da classe Conta.
![Page 15: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/15.jpg)
Funcionamento O TestRunner recebe uma subclasse de
junit.framework.TestCase e executa o método run(Test) Obtém dados de TestSuite - suite() TestSuite usa Java Reflection para descobrir os
métodos de teste
![Page 16: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/16.jpg)
Funcionamento
public static Test suite(){ return new TestSuite(ContaTest.class);
}
public static void main(String[] args){
junit.textui.TestRunner.run(suite());
}
![Page 17: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/17.jpg)
TestSuite Composição de testes
public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new ContaTest("testGetSaldo")); suite.addTest(new ContaTest("testCreditar")); return suite;}
Um TestSuite é usado pelo TestRunner para saber quais métodos devem ser executados como testes
![Page 18: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/18.jpg)
TestSuite Para executar mais de um teste de uma
vez e/ou reusar testes de outras classes (testes regressivos)
public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new ContaTest("testSaldoConta")); suite.addTest(new ContaTest("testCredito"));
suite.addTest(Poupanca.suite()); return suite;}
![Page 19: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/19.jpg)
Como funciona As asserções causam falhas quando os
resultados não estiverem corretos test.framework.AssertionFailedError
Cada instância de TestCase será utilizada para executar um dos métodos de teste As alterações que ele fizer ao estado do objeto
não afetarão as demais classes
![Page 20: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/20.jpg)
Boas Práticas Escreva o código de testes antes da
implementação. Dessa forma, você terá uma implementação dirigida por contrato
Teste somente métodos que podem estar quebrados (assim, métodos get e set não devem ser testados na maioria dos casos)
Teste sempre que possível
![Page 21: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/21.jpg)
Limitações Métodos private e variáveis locais Isolar em métodos private apenas código
inquebrável Transformar métodos private em
package-private Redução do encapsulamento Redução da modularização (classes de teste
espalhadas) JUnitX
Usa reflection para ter acesso a dados private http://www.extreme-java.de/junitx/index.html
![Page 23: J U nit Um Framework Para Testes. Motivação Todos os programadores sabem que devem testar seu código Quanto mais curto o prazo menos testes são realizados](https://reader035.vdocuments.net/reader035/viewer/2022062819/570638611a28abb82390008e/html5/thumbnails/23.jpg)
JUnitUm Framework Para Testes