• Nenhum resultado encontrado

UMC - Testes de Software - 5 - JUNIT - A

N/A
N/A
Protected

Academic year: 2021

Share "UMC - Testes de Software - 5 - JUNIT - A"

Copied!
31
0
0

Texto

(1)

Testes de Software –

Parte 2

UMC

(2)
(3)

JUnit

• Junit:

– framework open-source,

– criado por Erich Gamma e Kent Beck,

– suporte à criação de testes automatizados – linguagem de programação Java.

• Facilita a criação de código para a automação de testes com apresentação dos resultados.

• Pode ser verificado se cada método de uma classe funciona da forma esperada, exibindo possíveis erros ou falhas.

• O programador tem a possibilidade de usar esta ferramenta para criar um modelo padrão de testes, muitas vezes de forma automatizada.

• Permite a realização de testes de unidades, conhecidos como "caixa branca", facilitando assim a correção de métodos e objetos.

• O teste de unidade testa o menor dos componentes de um sistema de maneira isolada.

(4)

JUnit

• Arquitetura - A API do JUnit é organizada da seguinte forma: – Obs: versão 3 do JUNIT.

- Existe uma classe Test que contem um método runTest responsável por fazer testes particulares.

- Duas classes herdam da classe Test.

– a classe TestCase, que testa os resultados de um método,

– a classe TestSuite que faz um único teste em mais de um método registrando os resultados.

(5)

JUnit

• Método de comparação – assertEquals()

– O método assertEquals é um método que pode ser implementado de várias formas diferentes.

– Ele recebe como parâmetro o resultado do método que está sendo testado e o resultado esperado pelo desenvolvedor caso o método testado esteja correto.

– O tipo desses valores passados como parâmetro pode ser vários (int, double, String, etc…).

• Métodos setUp() e tearDown()

– O método setUp() é utilizado para sinalizar o início do processo de teste. Vem antes do método de teste.

– O método tearDown() sinaliza o final do processo, desfazendo o que o setUp() fez. Vem depois do método de Teste.

(6)

JUnit

• Passo 1: para cada classe a ser testada criar uma classe de Teste – Exemplo:

• classe Conta terá como classe de teste ContaTest • A classe de Teste deve herdar da classe TestCase

do framework JUnit TestCase assertEquals() assertNotNull() assertNull() fail() setUp() tearDown() run() ContaTest

(7)

JUnit

import junit.framework.*;

public class ContaTest extends TestCase { public ContaTest(String name) {

super(name); } ... } Importar classes do framework JUnit Herdar da classe TestCase Definir um construtor que recebe uma String

(8)

JUnit

• Passo 2: criar métodos de teste cujos nomes iniciam com

a palavra “test” e possuem tipo de retorno void. Exemplo

para a classe ContaTest:

– public void testCredito()

– public void testDebito()

– public void testCreditoNegativo()

– public void testDebitoNegativo()

(9)

JUnit

• Passo 3: para cada método de teste definir seu

comportamento:

– invocação de métodos da classe do sistema a ser

testada

– avaliação do resultado dos métodos sendo

testados usando os métodos assertEquals(), fail(),

assertNull(), assertNotNull() do framework JUnit

(10)

JUnit

public class ContaTest extends TestCase { ...

public void testCreditar(){

Conta contaNum111_Saldo200 = new Conta(111, 200.0); Conta contaNum111_Saldo50 = new Conta(112, 50.0); contaNum111_Saldo50.creditar(150.0); this.assertEquals(contaNum111_Saldo200, contaNum111_Saldo50); } } Declaração do método de teste

(11)

JUnit

• Alguns métodos do JUnit para teste:

– assertEquals (objetoEsperado, objetoTeste);

– assertTrue (expressaoBooleana);

– assertNull(objeto);

– assertNotNull(objeto);

– fail (mensagem);

(12)

JUnit

public class ContaTest extends TestCase { ...

public void testDebitar(){

Conta contaNum111_Saldo50 = new Conta(111, 50.0); Conta contaNum111_Saldo1 = new Conta(111, 1.0); try {

contaNum111_Saldo50.debitar(51.0);

} catch(SaldoInsuficienteException saldo){ fail("Operacao de Debito falhou");

}

this.assertEquals(contaNum111_Saldo1, contaNum111_Saldo50); }

(13)

JUnit

public class ContaTest extends TestCase { ...

public void testDebitoNegativo(){

Conta contaNum111_Saldo50 = new Conta(111, 50.0); try {

contaNum111_Saldo50.debitar(51.0);

fail("Deveria lançar SaldoInsuficienteException"); } catch(SaldoInsuficienteException saldo){

} } }

(14)

JUnit

• Caso necessário, pode-se definir configurações iniciais para serem

executadas antes de cada método de teste usando o método

setUp()

– configuração de objetos comuns aos casos de teste

– configuração de recursos comuns aos casos de teste

(exemplo: abertura de conexões de banco de dados, socket,

etc)

• Para liberar recursos utilizados pelos métodos de teste pode-se usar

o método

tearDown()

– Exemplos de recursos que podem ser liberados: streams,

fechar conexões de banco de dados, apagar/mover arquivos

de dados.

(15)

JUnit

public class ContaTest extends TestCase { Conta contaNum111_Saldo50;

Conta contaNum111_Saldo1; ...

public void setUp(){

this.contaNum111_Saldo50 = new Conta(111, 50.0); this.contaNum111_Saldo1 = new Conta(111, 1.0); }

... }

Execução antes de cada método de teste

(16)

JUnit

• Cada uma dessas unidades define um conjunto de estímulos (chamada de método), e de dados de entrada e saída associados a cada estímulo. • As entradas são parâmetros e as saídas são o valor de retorno,

exceções ou o estado do objeto.

• Teste unitário executa um método individualmente e compara uma saída conhecida após o processamento da mesma.

• Por exemplo:

Assert.assertEquals(2, algumMetodo(1));

– A expressão acima verifica se a saída de algumMetodo() é 2 quando esse método recebe o parâmetro 1.

– Assim sendo, o conceito chave de um teste de unidade é exercitar um código e qual o resultado esperado.

(17)

JUnit

• Exemplo de como codificar classes de testes em Java:

1. Crie uma classe que estenda junit.framework.TestCase para cada classe a ser testada:

import junit.framework.*;

class SuaClasseTest extends TestCase { … }

2. Para cada método a ser testado defina um método public void test???() no test case SuaClasseTest:

SuaClasse:

public int Soma(Object o ...) { ... } SuaClasseTest:

(18)

JUnit

• Exemplo simples

import junit.framework.*;

public class SimpleTest extends TestCase { public SimpleTest(String name) {

super(name); }

public void testSimpleTest() { int answer = 2; assertEquals((1+1), answer); } } 1 2 3 4 5

(19)

JUnit

import junit.framework.*;

Como estamos usando algumas construções criadas pelos fabricantes do Junit, temos de importar qualquer uma das classes que desejamos usar; a maioria destas reside no subdiretório do framework, daí a declaração de importação. public class SimpleTest extends TestCase {

Nossa classe simples precisa definir seu(s) próprio(s) método(s) de teste para, na verdade, ser de alguma utilidade; assim ela estende a classe TestCase que nos dá a capacidade de definir os nossos próprios métodos de teste.

public SimpleTest(String name) { super(name); }

A cada teste é dado um nome, assim quando vermos os resultados de todo o teste de saída, podemos ver de qual teste um erro foi gerado se o teste falhar. O construtor oferece essa funcionalidade, passando o parâmetro passado em construção para a classe pai.

1

2

(20)

JUnit

public void testSimpleTest() { int answer = 2;

Teste incluído neste caso de teste. Tem o mesmo nome do método

original, com a palavra test na frente. Podemos definir variáveis e realizar operações aritméticas como qualquer outro programa Java.

assertEquals((1+1), answer); }

Esta teste simples testa se 1+1 é igual ao valor da resposta, através do método assertEquals() da classe TesteCase estendida.

Obs: no lugar do parâmetro (1+1), chamamos o método que realiza o cálculo no programa original.

4

(21)

JUnit

• JUnit – Analisando o resultado

• Quando os testes forem executados em modo gráfico, os métodos testados podem apresentar os seguintes resultados:

(22)

JUnit

• Exemplo de Teste

Classe a ser testada

(23)

JUnit

• Resultado em caso de SUCESSO

• O test case CalculoTest.java está usando a declaração assertiva do método assertEquals(), que é assinado com dois parâmetros principais: o valor esperado, e valor retornado.

• Para isso instanciamos os atributos(variáveis) PassaValor1 = 10, PassaValor2 = 5 e RetornoEsperado = 15.

• Para o atributo RetornoFeito atribuímos o resultado do método ExecutaCalculo() da classe Calculo, passando como parâmetros PassaValor1 e PassaValor2.

• Por final usamos o método assertEquals (RetornoEsperado, RetornoFeito), para comparar o valor esperado com o valor retornado após a execução do método ExecultaCalculo().

(24)

JUnit

• Na lateral esquerda da tela temos o resultado da execução do teste através do JUnit, que nesse exemplo retornou com sucesso(verde), pois os valores passados(10 e 5) certamente quando somados retornam 15.

(25)

JUnit

• Execução com falha.

• Para isso, mudaremos o atributo PassaValor2 para 6, dessa forma,

claramente que 10 somado a 6 não dá 15 (valor esperado), dessa forma, o JUnit retornará uma falha (vermelha), observe também, que na parte

inferior da lateral esquerda da tela, ele mostra qual método falhou, e qual foi à falha.

(26)

JUnit

Método para teste da Classe Cálculo – criado pelo JUnit Tela:

(27)

JUnit

(28)

JUnit

(29)

JUnit

(30)

JUnit

(31)

Referências

Documentos relacionados

A Sementinha dormia muito descansada com as suas filhas. Ela aguardava a sua longa viagem pelo mundo. Sempre quisera viajar como um bando de andorinhas. No

vassourar – varrer... Que género de texto acabaste de ler? Justifica a tua resposta. Transcreve alguns versos que ilustrem a azáfama da vassoura. A dona da casa está descontente com

A Sementinha dormia muito descansada com as suas filhas. Ela aguardava a sua longa viagem pelo mundo. No entanto, sempre vivera junto ao pomar do António Seareiro e até

8- Indica duas utilizações do granito.. Indica duas utilizações

E, a certa altura, ela murmurava para o seu prostrado e inconsciente guerreiro: «não te deixarei morrer, David Crockett!» Não sei porquê, esta frase e esta cena viajaram comigo

13. Portugal teve condições privilegiadas para iniciar a Expansão marítima. Indica duas delas, explicitando-as.. Completa a legenda da imagem... 14.2. Esta embarcação

A bicharada já andava toda admirada, mas muito desconfiada!.

 Buscar nos manuais pedagógicos, orientações para tentar solucionar o problema de pesquisa do presente trabalho. Ou seja, elucidar que propostas de ensino em