TDD 2
Testes unitários com JUnit
HÉLIO MEDEIROS
                       Analista de Sistemas
                         SINFO - UFRN




Blog: http://heliomed...
COMO OBJETIVAR ??

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



                                  ...
VAGAR ATÉ CHEGAR

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

Ou você pode objetivar a chegada no próximo ponto do caminho que você
conhece, seguindo rotas validávei...
OBJETIVE SUA SOLUÇÃO
      COM TDD!
NOSSA AULA

• Parte   1 - Nomenclatura

• Parte   2 - Testes a moda antiga

• Parte   3 - JUnit

• Parte   4 - Mais exempl...
1   Nomenclatura
TERMOS E SIGNIFICADOS

•Fixture: é o conjunto de dados necessários para rodar os testes;
•Teste Unitário: é o tipo de test...
ENTENDENDO
Test Suite
                                          Relatório
         test fixture                  X         ...
2   Teste a moda antiga
VERIFICANDO RESULTADOS
public final class Calculadora {
	 /**
	   * Retorna a aproximação inteira da raiz quadrada de x.
	...
VERIFICANDO RESULTADOS
public class CalculadoraTesteSemJUnit {
	 /** Executa os testes. */
	 public static void main(Strin...
SAÍDA DO TESTE
qualARaiz(0) ==> 1
qualARaiz(1) ==> 1
qualARaiz(2) ==> 2
qualARaiz(3) ==> 2
qualARaiz(4) ==> 2
qualARaiz(7)...
SOLUÇÕES
Nós podemos neste ponto decidir por duas soluções
quando estamos pensando em testes e em automatizá-
los:

•Criar...
3   JUnit
FRAMEWORK
O JUnit é um dos frameworks para escrever testes em
Java.

•Foi criado pelo Kent Beck e pelo Erick Gamma;
•Ajuda...
PRIMEIRO TESTE UNITÁRIO
import static junit.framework.Assert.*;

public class CalculadoraTesteComJUnit {
	
	 @Test
	 publi...
MAIS INFORMATIVO?
UTILIZANDO O JUNIT
No Eclipse:
  Java Build Path > Add Libraries > JUnit

No Netbeans:
   Properties > Libraries > Add Lib...
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 O JUNIT
Os testes usam os “assert methods” como:
  •assertEquals(valor esperado, valor obtido);
  •assertTrue(co...
4   Mais exemplos
NOVOS REQUISITOS
Sua empresa esta desenvolvendo um novo serviço WEB
que auxiliará nos mais diversos cálculos, para tal voc...
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 sta...
CLASSE TESTE
public class AritmeticaTest {
	
	 @Test
	 public void testaSomaDeDoisNumeros() {
	 	 assertEquals(4, Aritmeti...
NOVOS REQUISITOS
Sua empresa esta desenvolvendo um sistema para
chamar em placar eletrônicos por fichas de cientes para
o a...
CLASSE CONTADOR
public class ContadorTest {
	 Contador counter;
	 @Before
	 public void setUp() {
	 	 counter = new Contad...
Próximos SlideShares
Carregando em…5
×

UnP Eng. Software - Aula 28

1.113 visualizações

Publicada em

Terceira aula sobre testes, e segunda sobre TDD, na qual é apresentada uma estratégia para validação automatizada de requisitos prática com TDD iniciando pela substituição de antigas conferências manuais por teste unitários implementados em java e anotados para teste com o JUnit.

Publicada em: Tecnologia, Negócios
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.113
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

UnP Eng. Software - Aula 28

  1. 1. TDD 2 Testes unitários com JUnit
  2. 2. HÉLIO MEDEIROS Analista de Sistemas SINFO - UFRN Blog: http://heliomedeiros.com Email: helio.cabralmedeiros@gmail.com
  3. 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. 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. 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/
  6. 6. OBJETIVE SUA SOLUÇÃO COM TDD!
  7. 7. NOSSA AULA • Parte 1 - Nomenclatura • Parte 2 - Testes a moda antiga • Parte 3 - JUnit • Parte 4 - Mais exemplos
  8. 8. 1 Nomenclatura
  9. 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. 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. 11. 2 Teste a moda antiga
  12. 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. 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. 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. 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. 16. 3 JUnit
  17. 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. 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)); } }
  19. 19. MAIS INFORMATIVO?
  20. 20. UTILIZANDO O JUNIT No Eclipse: Java Build Path > Add Libraries > JUnit No Netbeans: Properties > Libraries > Add Library > JUnit
  21. 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. 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. 23. 4 Mais exemplos
  24. 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. 25. NOVOS REQUISITOS Escreva o teste unitário para a classe Aritmetica, e os test cases para os métodos soma() e isPositivo().
  26. 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. 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. 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. 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); } }

×