SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
JUnit: framework de testes
unitários

    Fred Lopes
Agenda

   Parte 1 - teoria
       Testes unitários
       JUnit
           Introdução
           Arquitetura
           API resumida
           Boas práticas
           Exemplos de uso
   Parte 2 – prática (Eclipse)
       Criando testes
           Test Case
           Test Suite
       Executando testes
Testes unitários

   Fase do processo de teste em que se testam as menores
    unidades de software desenvolvidas
       Objetivo
           prevenir o aparecimento de bug’s oriundo de códigos mal escritos e
            garantir um nível de qualidade de produto durante o
            desenvolvimento de software
   Responsabilidade do próprio desenvolvedor
   Tipicamente executa um método individualmente
       compara uma saída conhecida após o processamento da mesma
   Não testam todo o software
   Em POO: unidade pode ser um método, uma classe ou um
    objeto
JUnit - introdução

   Framework (arcabouço) livre para testes
    automatizados escrito em Java
   Escrito originalmente por Kent Beck (Extreme
    Programming) e Erich Gamma (Design Patterns)
   Integração com as principais IDEs
   Grande comunidade de usuários
   Utilizado principalmente no desenvolvimento de
    testes de unidade
   http://www.junit.org
JUnit - introdução

   Vantagens
       Permite a criação rápida de código de teste possibilitando um
        aumento na qualidade do desenvolvimento e teste;
       Amplamente utilizado pelos desenvolvedores da comunidade
        código-aberto, possuindo um grande número de exemplos;
       Uma vez escritos, os testes são executados rapidamente sem
        que, para isso, seja interrompido o processo de
        desenvolvimento;
       JUnit checa os resultados dos testes e fornece uma resposta
        imediata;
       JUnit é livre e orientado a objetos.
   Pode verificar cada método de uma classe
       Exibição de possíveis erros e/ou falhas
JUnit - arquitetura
JUnit - arquitetura

   Classe TestCase
       run() – Cria um contexto (método setUp); em seguida executa o
        código usando um contexto e verifica o resultado (método
        runTest); e por fim, limpa o contexto (método tearDown).
       setUp() – Método chamado antes de cada método, pode ser
        utilizado para abrir uma conexão de banco de dados.
       tearDown() – Método chamado depois de cada método de teste,
        usado para desfazer o que setUp() fez, por exemplo fechar uma
        conexão de banco de dados.
       runTest() – Método responsável por controlar a execução de um
        teste particular.
   Classe TestSuite
       addTest() – Método responsável por adicionar um novo teste.
JUnit – API resumida
Método               Descrição              Teste passa se
assertEquals(a,b)    Compara dois valores   a.equals(b)

assertFalse(a)                              a == false
                     Avalia uma expressão
assertTrue(a)        booleana               a == true

assertNotNull(a)                            a != null
                     Compara uma variável
assertNull(a)        com nulo             a == null

assertNotSame(a,b)                          a == b
                     Compara dois objetos
assertSame(a,b)                             a != b

fail()               Causa uma falha no
                     teste atual
JUnit – boas práticas

   Test Case Class: [NomeClasse]Test.java,
    onde NomeClasse é o nome da classe a ser
    testada.
       Exemplo:
           Classe: Pessoa  classe de teste: PessoaTest
   Test Case Method: test[NomeMetodo], onde
    NomeMetodo é o método a ser testado.
       Exemplo:
           Método: Pessoa.calculaIdade() 
            PessoaTest.testCalculaIdade()
JUnit – exemplo de uso
import junit.framework.TestCase;

/**
 * Testes de unidade para a classe {@link Pessoa}
 */
public class TestPessoa extends TestCase {

 /**
  * Um teste de unidade para verificar se o nome está
  * formatado corretamente
  */
 public void testObterNomeCompleto() {
   Pessoa p = new Pessoa(“Fulano”, “Tal”);
   assertEquals(“Fulano Tal”, p.getNomeCompleto());
 }
JUnit – exemplo de uso
/**
  * Um teste de unidade para verificar se os nulos são
  * tratados corretamente
  */
  public void testNomeEhNulo() {
    Pessoa p = new Pessoa(null, “Tal”);
    assertEquals(“? Tal”, p.getNomeCompleto());

        // Este código só é executado se passar pelo
        // assertEquals anterior.
        p = new Pessoa(“Fulano”, null);
        assertEquals(“Fulano ?”, p.getNomeCompleto());
    }
}
JUnit – exemplo de uso

   Fixture: Conjunto de dados de teste e objetos
    utilizados na execução de um ou mais testes
   Para reaproveitar uma Fixture em mais de um teste:
    
        Sobrescreva o método setUp() (inicialização)
         protected void setUp() {
                contatos = new ArrayList();
         }

       Sobrescreva o método tearDown() (limpeza)
         protected void tearDown() {
                contatos.clear();
         }
JUnit – exemplo de uso
public class TesteSimples extends TestCase {
        private Collection colecao;
        protected void setUp() {
                contatos = new ArrayList();
        }
        protected void tearDown() {
                 contatos.clear();
        }
        public void testColecaoVazia() {
                assertTrue(contatos.isEmpty());
        }
        public void testColecaoComUmItem() {
                 contatos.add(quot;itemAquot;);
                assertEquals(1, contatos.size());
        }
}
JUnit – exemplo de uso

   Possível ordem de execução:
    
        setUp()
       testColecaoComUmItem()
       tearDown()
       setUp()
       testColecaoVazia()
       tearDown()
   Como os testes são chamados por reflexão, a ordem
    de execução dos testes pode não seguir o mesmo
    fluxo do código
   Garantia: setUp() será executado antes e tearDown()
    será executado depois
JUnit – Eclipse

   Agora vamos ver exemplos reais
    funcionando...

Más contenido relacionado

La actualidad más candente

Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium Mayron Cachina
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Luís Cobucci
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitelliando dias
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddCarlos Santana
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Testes de regressão automatizados
Testes de regressão automatizadosTestes de regressão automatizados
Testes de regressão automatizadosCristian R. Silva
 

La actualidad más candente (20)

Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Ferramentas testes2003
Ferramentas testes2003Ferramentas testes2003
Ferramentas testes2003
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Testes de Integração
Testes de IntegraçãoTestes de Integração
Testes de Integração
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOS
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tdd
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
ATDD Android
ATDD AndroidATDD Android
ATDD Android
 
Testes de regressão automatizados
Testes de regressão automatizadosTestes de regressão automatizados
Testes de regressão automatizados
 

Similar a JUnit: framework de testes unitários

Testes de performance com JUnitPerf
Testes de performance com JUnitPerfTestes de performance com JUnitPerf
Testes de performance com JUnitPerfDenis L Presciliano
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Danilo Pereira De Luca
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Javaaceiro
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Testes Unitários com GTest e Catch
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e CatchUilian Ries
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - SeleniumCaue Guerra
 

Similar a JUnit: framework de testes unitários (20)

Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Testes de performance com JUnitPerf
Testes de performance com JUnitPerfTestes de performance com JUnitPerf
Testes de performance com JUnitPerf
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Aula5
Aula5Aula5
Aula5
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
J unit xp
J unit xpJ unit xp
J unit xp
 
Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Java
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Testes Unitários com GTest e Catch
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e Catch
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - Selenium
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 

Más de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Más de elliando dias (20)

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

JUnit: framework de testes unitários

  • 1. JUnit: framework de testes unitários Fred Lopes
  • 2. Agenda  Parte 1 - teoria  Testes unitários  JUnit  Introdução  Arquitetura  API resumida  Boas práticas  Exemplos de uso  Parte 2 – prática (Eclipse)  Criando testes  Test Case  Test Suite  Executando testes
  • 3. Testes unitários  Fase do processo de teste em que se testam as menores unidades de software desenvolvidas  Objetivo  prevenir o aparecimento de bug’s oriundo de códigos mal escritos e garantir um nível de qualidade de produto durante o desenvolvimento de software  Responsabilidade do próprio desenvolvedor  Tipicamente executa um método individualmente  compara uma saída conhecida após o processamento da mesma  Não testam todo o software  Em POO: unidade pode ser um método, uma classe ou um objeto
  • 4. JUnit - introdução  Framework (arcabouço) livre para testes automatizados escrito em Java  Escrito originalmente por Kent Beck (Extreme Programming) e Erich Gamma (Design Patterns)  Integração com as principais IDEs  Grande comunidade de usuários  Utilizado principalmente no desenvolvimento de testes de unidade  http://www.junit.org
  • 5. JUnit - introdução  Vantagens  Permite a criação rápida de código de teste possibilitando um aumento na qualidade do desenvolvimento e teste;  Amplamente utilizado pelos desenvolvedores da comunidade código-aberto, possuindo um grande número de exemplos;  Uma vez escritos, os testes são executados rapidamente sem que, para isso, seja interrompido o processo de desenvolvimento;  JUnit checa os resultados dos testes e fornece uma resposta imediata;  JUnit é livre e orientado a objetos.  Pode verificar cada método de uma classe  Exibição de possíveis erros e/ou falhas
  • 7. JUnit - arquitetura  Classe TestCase  run() – Cria um contexto (método setUp); em seguida executa o código usando um contexto e verifica o resultado (método runTest); e por fim, limpa o contexto (método tearDown).  setUp() – Método chamado antes de cada método, pode ser utilizado para abrir uma conexão de banco de dados.  tearDown() – Método chamado depois de cada método de teste, usado para desfazer o que setUp() fez, por exemplo fechar uma conexão de banco de dados.  runTest() – Método responsável por controlar a execução de um teste particular.  Classe TestSuite  addTest() – Método responsável por adicionar um novo teste.
  • 8. JUnit – API resumida Método Descrição Teste passa se assertEquals(a,b) Compara dois valores a.equals(b) assertFalse(a) a == false Avalia uma expressão assertTrue(a) booleana a == true assertNotNull(a) a != null Compara uma variável assertNull(a) com nulo a == null assertNotSame(a,b) a == b Compara dois objetos assertSame(a,b) a != b fail() Causa uma falha no teste atual
  • 9. JUnit – boas práticas  Test Case Class: [NomeClasse]Test.java, onde NomeClasse é o nome da classe a ser testada.  Exemplo:  Classe: Pessoa  classe de teste: PessoaTest  Test Case Method: test[NomeMetodo], onde NomeMetodo é o método a ser testado.  Exemplo:  Método: Pessoa.calculaIdade()  PessoaTest.testCalculaIdade()
  • 10. JUnit – exemplo de uso import junit.framework.TestCase; /** * Testes de unidade para a classe {@link Pessoa} */ public class TestPessoa extends TestCase { /** * Um teste de unidade para verificar se o nome está * formatado corretamente */ public void testObterNomeCompleto() { Pessoa p = new Pessoa(“Fulano”, “Tal”); assertEquals(“Fulano Tal”, p.getNomeCompleto()); }
  • 11. JUnit – exemplo de uso /** * Um teste de unidade para verificar se os nulos são * tratados corretamente */ public void testNomeEhNulo() { Pessoa p = new Pessoa(null, “Tal”); assertEquals(“? Tal”, p.getNomeCompleto()); // Este código só é executado se passar pelo // assertEquals anterior. p = new Pessoa(“Fulano”, null); assertEquals(“Fulano ?”, p.getNomeCompleto()); } }
  • 12. JUnit – exemplo de uso  Fixture: Conjunto de dados de teste e objetos utilizados na execução de um ou mais testes  Para reaproveitar uma Fixture em mais de um teste:   Sobrescreva o método setUp() (inicialização) protected void setUp() { contatos = new ArrayList(); }  Sobrescreva o método tearDown() (limpeza) protected void tearDown() { contatos.clear(); }
  • 13. JUnit – exemplo de uso public class TesteSimples extends TestCase { private Collection colecao; protected void setUp() { contatos = new ArrayList(); } protected void tearDown() { contatos.clear(); } public void testColecaoVazia() { assertTrue(contatos.isEmpty()); } public void testColecaoComUmItem() { contatos.add(quot;itemAquot;); assertEquals(1, contatos.size()); } }
  • 14. JUnit – exemplo de uso  Possível ordem de execução:   setUp()  testColecaoComUmItem()  tearDown()  setUp()  testColecaoVazia()  tearDown()  Como os testes são chamados por reflexão, a ordem de execução dos testes pode não seguir o mesmo fluxo do código  Garantia: setUp() será executado antes e tearDown() será executado depois
  • 15. JUnit – Eclipse  Agora vamos ver exemplos reais funcionando...