SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
TDD 2
Testes unitários com JUnit
HÉLIO MEDEIROS
                       Analista de Sistemas
                         SINFO - UFRN




Blog: http://heliomedeiros.com
Email: helio.cabralmedeiros@gmail.com
COMO OBJETIVAR ??

Como você faz normalmente para chegar a um lugar onde nunca foi ?



                                                              Você conhece o ponto de partida!!!




                                                              VOCÊ TEM UMA FOTO DO FINAL!!!


   http://www.flickr.com/photos/frank_wuestefeld/4396122394/
VAGAR ATÉ CHEGAR

Você pode vagar até chegar... mais os ambientes no mundo de software são
tão hostis quanto o deserto!!!


                                                             Você conhece o ponto de partida!!!


                                                                  VAGAR ATÉ ACABAR OS RECURSOS



                                                            Você tem uma foto do final!!
   http://www.flickr.com/photos/desireedelgado/3344620470/
SEGUIR UMA TRILHA

Ou você pode objetivar a chegada no próximo ponto do caminho que você
conhece, seguindo rotas validáveis!!!


                                                           Você conhece o ponto de partida!!!


                                                                     VOCÊ SEGUE PEQUENOS
                                                                    CAMINHOS CONHECIDOS



                                                          Você tem uma foto do final!!
   http://www.flickr.com/photos/move_lachine/3517678051/
OBJETIVE SUA SOLUÇÃO
      COM TDD!
NOSSA AULA

• Parte   1 - Nomenclatura

• Parte   2 - Testes a moda antiga

• Parte   3 - JUnit

• Parte   4 - Mais exemplos
1   Nomenclatura
TERMOS E SIGNIFICADOS

•Fixture: é o conjunto de dados necessários para rodar os testes;
•Teste Unitário: é o tipo de teste realizado sobre uma única CLASSE;
•Test Case: é a verificação da resposta de um único método a uma
entrada ou conjunto delas;
•Test Suite: é o conjunto de TEST CASES;
•Test Runner: é o software responsável por rodar testes e gerar
relatórios com os resultados;

•Sucesso: é quando o teste é bem sucedido, pois a resposta é a esperada;
•Falha: é quando o teste não é bem sucedido, pois a resposta não é a
esperada;
•Erro: é quando o teste não pode ser realizado por causa de algum erro de
execução.
ENTENDENDO
Test Suite
                                          Relatório
         test fixture                  X          sucessos
                                      Y           falhas
                                      Z           erros
 unit test
  test case   test case   test case
  test case   test case   test case


 unit test                                 test
  test case   test case   test case       runner
  test case   test case   test case
2   Teste a moda antiga
VERIFICANDO RESULTADOS
public final class Calculadora {
	 /**
	   * Retorna a aproximação inteira da raiz quadrada de x.
	   */
	 public static int qualARaiz(int x) {
	 	 int guess = 1;
	 	 while (guess * guess < x) {
	 	 	 guess++;
	 	 }
	 	 return guess;

	   }
}
VERIFICANDO RESULTADOS
public class CalculadoraTesteSemJUnit {
	 /** Executa os testes. */
	 public static void main(String[] args) {
	 	 printTestResult(0);
	 	 printTestResult(1);
	 	 printTestResult(2);
	 	 printTestResult(3);
	 	 printTestResult(4);
	 	 printTestResult(7);
	 	 printTestResult(9);
	 	 printTestResult(100);
	 }

	   private static void printTestResult(int arg){
	   	 System.out.print("qualARaiz("+arg+") ==> ");
	   	 System.out.println(Calculadora.qualARaiz(arg));
	   }
}
SAÍDA DO TESTE
qualARaiz(0) ==> 1
qualARaiz(1) ==> 1
qualARaiz(2) ==> 2
qualARaiz(3) ==> 2
qualARaiz(4) ==> 2
qualARaiz(7) ==> 3
qualARaiz(9) ==> 3
qualARaiz(100) ==> 10


•O código está correto ? Essas são realmente as raizes quadradas ?
•Qual o problema com esta saída de dados ?
•Como posso saber os problemas gerados quando fizer qualquer
alteração futura ?
SOLUÇÕES
Nós podemos neste ponto decidir por duas soluções
quando estamos pensando em testes e em automatizá-
los:

•Criar nosso próprio programa de testes;
•Usar uma ferramenta de testes existente e de
qualidade como o JUnit.
3   JUnit
FRAMEWORK
O JUnit é um dos frameworks para escrever testes em
Java.

•Foi criado pelo Kent Beck e pelo Erick Gamma;
•Ajuda o programador a:
  • Definir e executar testes e suítes de testes;
  • Validar requisitos;
  • Escrever e depurar código;
  • Integrar código e ter a garantia de entregar versões
  funcionais;
PRIMEIRO TESTE UNITÁRIO
import static junit.framework.Assert.*;

public class CalculadoraTesteComJUnit {
	
	 @Test
	 public void verificaARaizQuadra() {
	 	 assertEquals(0, Calculadora.qualARaiz(0));
	 	 assertEquals(1, Calculadora.qualARaiz(1));
	 	 assertEquals(1, Calculadora.qualARaiz(2));
	 	 assertEquals(1, Calculadora.qualARaiz(3));
	 	 assertEquals(2, Calculadora.qualARaiz(4));
	 	 assertEquals(2, Calculadora.qualARaiz(7));
	 	 assertEquals(3, Calculadora.qualARaiz(9));
	 	 assertEquals(10, Calculadora.qualARaiz(100));
	 }
}
MAIS INFORMATIVO?
UTILIZANDO O JUNIT
No Eclipse:
  Java Build Path > Add Libraries > JUnit

No Netbeans:
   Properties > Libraries > Add Library > JUnit
ANOTAÇÕES O JUNIT
Uma classe de testes com a JUnit é um POJO cujos
métodos são anotados com @Test, e podem possuir
outras anotações como:
•@Before, @BeforeClass
•@After, @AfterClass
•@Ignore
•@Test(expected=...)
ANOTAÇÕES O JUNIT
Os testes usam os “assert methods” como:
  •assertEquals(valor esperado, valor obtido);
  •assertTrue(condicao booleana);
  •assertNull(objeto a verificar)
Todos estes métodos são estáticos da classe Assert e
para serem utilizados sem a necessidade de referir a
classe proprietária do métodos deve ser feito sempre
um import static.
4   Mais exemplos
NOVOS REQUISITOS
Sua empresa esta desenvolvendo um novo serviço WEB
que auxiliará nos mais diversos cálculos, para tal você cria
uma classe para os cálculos básicos chamada Aritmetica.

Uma das operações básicas realizadas sistema a fora é a
da soma de dois números e de verificação se o número
ou resultado é positivo ou não.
NOVOS REQUISITOS
Escreva o teste unitário para a classe Aritmetica, e os
test cases para os métodos soma() e isPositivo().
CLASSE ARITMETICA
public class Aritmetica {
	 public static int soma(int i, int j) {
	 	 return i + j;
	 }

	   public static boolean isPositivo(int numero) {
	   	 return numero > 0 ? true : false;
	   }
}
CLASSE TESTE
public class AritmeticaTest {
	
	 @Test
	 public void testaSomaDeDoisNumeros() {
	 	 assertEquals(4, Aritmetica.soma(2,2));
	 	 assertEquals(-15, Aritmetica.soma(-10, -5));	   	
	 }
	
	 @Test
	 public void testaSeEPositivo(){
	 	 assertTrue(Aritmetica.isPositivo(5));
	 	 assertFalse(Aritmetica.isPositivo(-10));
	 }

}
NOVOS REQUISITOS
Sua empresa esta desenvolvendo um sistema para
chamar em placar eletrônicos por fichas de cientes para
o atendimento.

Como exemplo iremos criar e testar a classe “Contador”
  •O construtor irá criar um contador e setá-lo para
  zero;
  •O método incrementar irá adicionar um ao
  contador e retornar o novo valor;
  •O método decrementar irá subtrair um do
  contador e retornar o novo valor;
CLASSE CONTADOR
public class ContadorTest {
	 Contador counter;
	 @Before
	 public void setUp() {
	 	 counter = new Contador();
	 }
	 @Test
	 public void testIncrement() {
	 	 assertTrue(counter.increment() == 1);
	 	 assertTrue(counter.increment() == 2);
	 }
	 @Test
	 public void testDecrement() {
	 	 assertTrue(counter.decrement() == -1);
	 }
}

Mais conteúdo relacionado

Mais procurados

Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 
Aula18 Teste Software
Aula18 Teste SoftwareAula18 Teste Software
Aula18 Teste SoftwareMarco Silva
 
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
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: ExceçõesEduardo Mendes
 
Instruções de controle 1
Instruções de controle 1Instruções de controle 1
Instruções de controle 1Cícero Quarto
 
2012 qualificacao-rodrigo-2012
2012 qualificacao-rodrigo-20122012 qualificacao-rodrigo-2012
2012 qualificacao-rodrigo-2012Rodrigo Rocha
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraValberto Carneiro
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch caseAlessandra Sra JM
 
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
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesAlvaro Oliveira
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch caseAlessandra Sra JM
 

Mais procurados (19)

Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
JAVA - Tratamento de Erros
JAVA - Tratamento de ErrosJAVA - Tratamento de Erros
JAVA - Tratamento de Erros
 
Ferramentas testes2003
Ferramentas testes2003Ferramentas testes2003
Ferramentas testes2003
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 
Aula18 Teste Software
Aula18 Teste SoftwareAula18 Teste Software
Aula18 Teste Software
 
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
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Instruções de controle 1
Instruções de controle 1Instruções de controle 1
Instruções de controle 1
 
2012 qualificacao-rodrigo-2012
2012 qualificacao-rodrigo-20122012 qualificacao-rodrigo-2012
2012 qualificacao-rodrigo-2012
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch case
 
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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch case
 

Semelhante a UnP Eng. Software - Aula 28

Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
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
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
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
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
GOTEST-Aula4-Automacao-Parte1.pdf
GOTEST-Aula4-Automacao-Parte1.pdfGOTEST-Aula4-Automacao-Parte1.pdf
GOTEST-Aula4-Automacao-Parte1.pdfRodolphoCesar2
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...minastestingconference
 

Semelhante a UnP Eng. Software - Aula 28 (20)

1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
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
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
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...
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
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
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
GOTEST-Aula4-Automacao-Parte1.pdf
GOTEST-Aula4-Automacao-Parte1.pdfGOTEST-Aula4-Automacao-Parte1.pdf
GOTEST-Aula4-Automacao-Parte1.pdf
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...
Criando um ambiente real de distribuição de aplicativos usando TestFairy: Mai...
 
Testing sucks
Testing sucksTesting sucks
Testing sucks
 

Mais de Hélio Medeiros

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Hélio Medeiros
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividadesHélio Medeiros
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a diaHélio Medeiros
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamentoHélio Medeiros
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Hélio Medeiros
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Hélio Medeiros
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refensHélio Medeiros
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelHélio Medeiros
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaHélio Medeiros
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na praticaHélio Medeiros
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesHélio Medeiros
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelHélio Medeiros
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDHélio Medeiros
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWHélio Medeiros
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBHélio Medeiros
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Hélio Medeiros
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoHélio Medeiros
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotHélio Medeiros
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Hélio Medeiros
 

Mais de Hélio Medeiros (20)

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividades
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a dia
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamento
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refens
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testável
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na pratica
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na pratica
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEW
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUB
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojo
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpot
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
 

UnP Eng. Software - Aula 28

  • 2. HÉLIO MEDEIROS Analista de Sistemas SINFO - UFRN Blog: http://heliomedeiros.com Email: helio.cabralmedeiros@gmail.com
  • 3. COMO OBJETIVAR ?? Como você faz normalmente para chegar a um lugar onde nunca foi ? Você conhece o ponto de partida!!! VOCÊ TEM UMA FOTO DO FINAL!!! http://www.flickr.com/photos/frank_wuestefeld/4396122394/
  • 4. VAGAR ATÉ CHEGAR Você pode vagar até chegar... mais os ambientes no mundo de software são tão hostis quanto o deserto!!! Você conhece o ponto de partida!!! VAGAR ATÉ ACABAR OS RECURSOS Você tem uma foto do final!! http://www.flickr.com/photos/desireedelgado/3344620470/
  • 5. SEGUIR UMA TRILHA Ou você pode objetivar a chegada no próximo ponto do caminho que você conhece, seguindo rotas validáveis!!! Você conhece o ponto de partida!!! VOCÊ SEGUE PEQUENOS CAMINHOS CONHECIDOS Você tem uma foto do final!! http://www.flickr.com/photos/move_lachine/3517678051/
  • 7. NOSSA AULA • Parte 1 - Nomenclatura • Parte 2 - Testes a moda antiga • Parte 3 - JUnit • Parte 4 - Mais exemplos
  • 8. 1 Nomenclatura
  • 9. TERMOS E SIGNIFICADOS •Fixture: é o conjunto de dados necessários para rodar os testes; •Teste Unitário: é o tipo de teste realizado sobre uma única CLASSE; •Test Case: é a verificação da resposta de um único método a uma entrada ou conjunto delas; •Test Suite: é o conjunto de TEST CASES; •Test Runner: é o software responsável por rodar testes e gerar relatórios com os resultados; •Sucesso: é quando o teste é bem sucedido, pois a resposta é a esperada; •Falha: é quando o teste não é bem sucedido, pois a resposta não é a esperada; •Erro: é quando o teste não pode ser realizado por causa de algum erro de execução.
  • 10. ENTENDENDO Test Suite Relatório test fixture X sucessos Y falhas Z erros unit test test case test case test case test case test case test case unit test test test case test case test case runner test case test case test case
  • 11. 2 Teste a moda antiga
  • 12. VERIFICANDO RESULTADOS public final class Calculadora { /** * Retorna a aproximação inteira da raiz quadrada de x. */ public static int qualARaiz(int x) { int guess = 1; while (guess * guess < x) { guess++; } return guess; } }
  • 13. VERIFICANDO RESULTADOS public class CalculadoraTesteSemJUnit { /** Executa os testes. */ public static void main(String[] args) { printTestResult(0); printTestResult(1); printTestResult(2); printTestResult(3); printTestResult(4); printTestResult(7); printTestResult(9); printTestResult(100); } private static void printTestResult(int arg){ System.out.print("qualARaiz("+arg+") ==> "); System.out.println(Calculadora.qualARaiz(arg)); } }
  • 14. SAÍDA DO TESTE qualARaiz(0) ==> 1 qualARaiz(1) ==> 1 qualARaiz(2) ==> 2 qualARaiz(3) ==> 2 qualARaiz(4) ==> 2 qualARaiz(7) ==> 3 qualARaiz(9) ==> 3 qualARaiz(100) ==> 10 •O código está correto ? Essas são realmente as raizes quadradas ? •Qual o problema com esta saída de dados ? •Como posso saber os problemas gerados quando fizer qualquer alteração futura ?
  • 15. SOLUÇÕES Nós podemos neste ponto decidir por duas soluções quando estamos pensando em testes e em automatizá- los: •Criar nosso próprio programa de testes; •Usar uma ferramenta de testes existente e de qualidade como o JUnit.
  • 16. 3 JUnit
  • 17. FRAMEWORK O JUnit é um dos frameworks para escrever testes em Java. •Foi criado pelo Kent Beck e pelo Erick Gamma; •Ajuda o programador a: • Definir e executar testes e suítes de testes; • Validar requisitos; • Escrever e depurar código; • Integrar código e ter a garantia de entregar versões funcionais;
  • 18. PRIMEIRO TESTE UNITÁRIO import static junit.framework.Assert.*; public class CalculadoraTesteComJUnit { @Test public void verificaARaizQuadra() { assertEquals(0, Calculadora.qualARaiz(0)); assertEquals(1, Calculadora.qualARaiz(1)); assertEquals(1, Calculadora.qualARaiz(2)); assertEquals(1, Calculadora.qualARaiz(3)); assertEquals(2, Calculadora.qualARaiz(4)); assertEquals(2, Calculadora.qualARaiz(7)); assertEquals(3, Calculadora.qualARaiz(9)); assertEquals(10, Calculadora.qualARaiz(100)); } }
  • 20. UTILIZANDO O JUNIT No Eclipse: Java Build Path > Add Libraries > JUnit No Netbeans: Properties > Libraries > Add Library > JUnit
  • 21. ANOTAÇÕES O JUNIT Uma classe de testes com a JUnit é um POJO cujos métodos são anotados com @Test, e podem possuir outras anotações como: •@Before, @BeforeClass •@After, @AfterClass •@Ignore •@Test(expected=...)
  • 22. ANOTAÇÕES O JUNIT Os testes usam os “assert methods” como: •assertEquals(valor esperado, valor obtido); •assertTrue(condicao booleana); •assertNull(objeto a verificar) Todos estes métodos são estáticos da classe Assert e para serem utilizados sem a necessidade de referir a classe proprietária do métodos deve ser feito sempre um import static.
  • 23. 4 Mais exemplos
  • 24. NOVOS REQUISITOS Sua empresa esta desenvolvendo um novo serviço WEB que auxiliará nos mais diversos cálculos, para tal você cria uma classe para os cálculos básicos chamada Aritmetica. Uma das operações básicas realizadas sistema a fora é a da soma de dois números e de verificação se o número ou resultado é positivo ou não.
  • 25. NOVOS REQUISITOS Escreva o teste unitário para a classe Aritmetica, e os test cases para os métodos soma() e isPositivo().
  • 26. CLASSE ARITMETICA public class Aritmetica { public static int soma(int i, int j) { return i + j; } public static boolean isPositivo(int numero) { return numero > 0 ? true : false; } }
  • 27. CLASSE TESTE public class AritmeticaTest { @Test public void testaSomaDeDoisNumeros() { assertEquals(4, Aritmetica.soma(2,2)); assertEquals(-15, Aritmetica.soma(-10, -5)); } @Test public void testaSeEPositivo(){ assertTrue(Aritmetica.isPositivo(5)); assertFalse(Aritmetica.isPositivo(-10)); } }
  • 28. NOVOS REQUISITOS Sua empresa esta desenvolvendo um sistema para chamar em placar eletrônicos por fichas de cientes para o atendimento. Como exemplo iremos criar e testar a classe “Contador” •O construtor irá criar um contador e setá-lo para zero; •O método incrementar irá adicionar um ao contador e retornar o novo valor; •O método decrementar irá subtrair um do contador e retornar o novo valor;
  • 29. CLASSE CONTADOR public class ContadorTest { Contador counter; @Before public void setUp() { counter = new Contador(); } @Test public void testIncrement() { assertTrue(counter.increment() == 1); assertTrue(counter.increment() == 2); } @Test public void testDecrement() { assertTrue(counter.decrement() == -1); } }