23
JUnit Um Framework Para Testes

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 22: 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

Referências

http://www.junit.org

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

JUnitUm Framework Para Testes