JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

Documentos relacionados
JUnit: framework de testes unitários. Fred Lopes

Testes Unitários com JUnit

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos

TESTE DE SOFTWARE COM XP. Isac Aguiar isacaguiar.com.br

Teste Automatizado POO. Prof. Marcio Delamaro

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Linguagem de Programação II Implementação

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:


Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Computação II Orientação a Objetos

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

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Análise e Projeto Orientados a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

p Pacotes, a grosso modo, são apenas pastas ou diretórios do sistema operacional onde ficam armazenados os arquivos fonte de Java.

Palavras Reservadas da Linguagem Java

Ferramenta Selenium. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Idiomas de Programação

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagem de Programação II Implementação

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Análise de Programação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Exercício de Estrutura de dados. Java Fila

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Departamento de Computação Curso de Análise e Desenvolvimento de Sistemas Modelagem Conceitual de Dados

JUNIT 28/03/2011. Márcio Delamaro Harry Trinta

Programação Orientada a Objetos

Padrões de Testes Automatizados

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

POO Programação Orientada a Objetos

9 Classes Abstractas e Interfaces

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Linguagem de Programação III


Instalação JDK 10/03/2017

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

4 Conceito de Herança

Testes com objetos mock. Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Análise e Projeto Orientados a Objetos

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

AULA 6 - ARRAYS. Array de 10 elementos

Métodos em Java. Prof. Esp. André Aparecido da Silva (Aulas 31 a 33) Disponível em:

Aula 1 POO 1 Prática. Profa. Elaine Faria UFU

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Instalação JDK. Joyce França. Professora de Ciência da Computação - IFNMG

Instituto Superior de Engenharia de Lisboa

Linguagem de Programação II Herança

DIRETORIA ACADÊMICA DE GESTÃO E TECNOLOGIA DA INFORMAÇÃO DIATINF TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TADS

Programação Java (nível intermediário) 4. Polimorfismo

Orientação a Objetos - Herança

Programação Orientada a Objetos em Java

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

O AMBIENTE DE DESENVOLVIMENTO

1 Introdução e Conceitos básicos

CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I

Programação Orientada a Objetos II

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Análise e Projeto Orientados a Objetos

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

A Relação de Subtipo e Tipos Genéricos

A figura abaixo representa uma classe denominada Carteira. Esta classe é composta dos métodos depositar(valor) e retirar(valor) e do atributo saldo.

Biblioteca Gráfica. Adriano Cruz. 28 de Abril de 2015

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Vector Java. Empregado.java

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

JAVA TÓPICOS ESPECIAIS DE PROGRAMACAO ORIENTADA A OBJETOS

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Programação Orientada a Objetos

Testes com JUnit. Treinamento ALESP SPL. Danilo Toshiaki Sato.

Teste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado

1) Responda de acordo com os conceitos de orientação a objetos (0,5).

PROGRAMAÇÃO I A LINGUAGEM DE PROGRAMAÇÃO JAVA I

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Simulado de Linguagem de Programação Java

Agilizando o processo de redeploy de aplicações Java

Desenvolvendo aplicações Java

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Primefaces 3. Laboratório Passo-a-Passo. JSF - Primefaces. Prof. Leandro Rubim de Freitas Versão 1.

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Linguagem de Programação III

Transcrição:

JUnit Alexandre Menezes Silva alexandre_crvg@hotmail.com Eduardo Manuel de Freitas Jorge emjorge1974@gmail.com 0

Sumário O que é?... 2 Pra que serve?... 2 Arquitetura... 2 Método de comparação assertequals... 2 Métodos setup() e teardown()... 3 Configurção do Eclipse... 3 Exemplo Prático... 4 Conclusão... 9 Referências... 9 1

O que é? JUnit é um Framework open-source utilizado para facilitar o desenvolvimento de códigos em Java verificando se os resultados gerados pelos métodos são os esperados. Caso não sejam, o JUnit exibe os possíveis erros que estão ocorrendo nos métodos. Essa verificação é chamada de teste unitário ou teste de unidade. Para que serve? Atualmente, buscando cada vez mais melhorias nos softwares, os desenvolvedores fazem uma bateria de testes nos seus códigos. Um desses testes é o teste de unidade que testa a menor parte do código garantindo uma maior qualidade do produto no processo de desenvolvimento. No caso da linguagem Java esse teste é feito através do JUnit em cada método separadamente. Arquitetura Figura 1 Test runtest runtest runtest setup teardown TestCase TestSuite A API do JUnit é organizada da seguinte forma: - Existe uma classe Test que contem um método runtest responsável por fazer testes particulares. - Duas classes que herdam da classe Test. A classe TestCase, que testa os resultados de um método, e a classe TestSuite que faz um único teste em mais de um método registrando os resultados. - A classe TestCase possui também os métodos setup e TearDown. Método de comparação assertequals() O método assertequals (que será exemplificado neste tutorial) é 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 2

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. Configuração do eclipse Antes de iniciar o exemplo com o JUnit é necessário inserir no seu Eclipse a biblioteca do Framework. Pode ser encontrado no site http://www.junit.org na seção de downloads o arquivo junit-4.4.jar. Crie um Projeto com um nome qualquer. Depois vá em Project/Properties, como mostra a figura 2. Figura 2 Dentro de Properties selecione a opção Java Build Path. Na aba libraries clique em Add External JARs, como mostra a figura 3. Figura 3 3

JUnit. Agora o seu Eclipse está pronto para ser usado com a biblioteca do Exemplo Prático O exemplo prático consiste na implementação de três classes que são MemoriaS (classe pai), HD (herda de MemoriaS) e CD (também herda de MemoriaS) e a classe de teste do JUnit (que vai herdar de TestCase). Essa última será chamada de MemoriaTeste. As três primeiras classes desse exemplo prático foram geradas a partir de um exercício que pode ser encontrado no site do Professor Eduardo Manuel de Freitas Jorge, através do link http://www.novatec.org/emjorge/tp/lista1.htm. Implementação das classes MemoriaS: public abstract class MemoriaS { //Inicio da classe MemoriaS public static final int BYTE=1; /*constante que define a unidade como BYTE*/ public static final int KB=2; /*constante que define a unidade como KB*/ public static final int MB=3; /*constante que define a unidade como MB*/ public static final int GB=4; /*constante que define a unidade como GB*/ protected double total; protected double utilizadokb; protected int unidade; /*Método que busca o valor gravado*/ public double getutilizadokb(){ return this.utilizadokb; /*Método construtor. Recebe como parâmetro quanto deve ser gravado e a unidade em que deve ser gravado*/ public MemoriaS(int newtotal,int newunidade){ this.total=newtotal; this.unidade=newunidade; this.utilizadokb=0; /*Método construtor que recebe como parâmetro quanto deve ser gravado e define a unidade como KB e chama o outro método construtor*/ public MemoriaS(int newtotal){ this(newtotal, KB); /*Método abstrato que retornará a perda na gravação*/ public abstract double getperda(); /*Método abstrato que retornará o espaço disponínel real em KB*/ public abstract double getespacodisponivelrealkb(); /*Método que retorna o espaço disponível em KB*/ public double getespacodisponivelkb(){ return this.getconvertekb(this.total); /*Método utilizado na gravação*/ public boolean GravaKB(int newtamanho){ 4

if(this.getconvertekb(this.total)- this.utilizadokb>=newtamanho){ this.utilizadokb=this.utilizadokb+newtamanho; return true; return false; /*Método que converte a unidade para KB*/ public double getconvertekb(double valor){ if(this.unidade==byte){ return valor/1024; else if(this.unidade==mb){ return valor*1024; else if(this.unidade==gb){ return valor*1024*1024; else return valor; /*Método que busca a unidade*/ public String getunidade(){ if(this.unidade==byte){ return "BYTE"; else if(this.unidade==kb){ return "KB"; else if(this.unidade==mb){ return "MB"; else return "GB"; /*Método que busca o percentual disponível*/ public double getpercentualdisponivel(){ return (this.getconvertekb(this.total)- this.utilizadokb)/this.getconvertekb(this.total)*100; public String tostring(){ return "Percentual Disponivel: "+getpercentualdisponivel()+"%\nespaço Total: "+getespacodisponivelkb()+"kb\nespaço Disponivel Real: "+getespacodisponivelrealkb()+"kb\nperda: "+getperda()+"kb"; public static void main(string args[]){ MemoriaS hd = new HD("46327", 10, MemoriaS.MB); MemoriaS cd = new CD(650, MemoriaS.MB); hd.gravakb(10242); cd.gravakb(665602); System.out.println(hd); System.out.println(cd); 5

HD: public class HD extends MemoriaS{/*Início da classe HD que estende MemoriaS*/ protected String numeroserie; /*Método constructor. Recebe como parâmetro o numero da série, o tamanho do HD e a unidade que representa o tamanho*/ public HD(String newnumeroserie, int newtotal, int newunidade){ super(newtotal, newunidade); this.numeroserie=newnumeroserie; /*Método que reescreve o método abstrato da classe pai. Retorna o espaço real disponível em KB*/ public double getespacodisponivelrealkb() { return this.getespacodisponivelkb()-super.getutilizadokb(); /*Método que reescreve o método abstrato da classe pai. Retorna a perda na gravação*/ public double getperda() { return this.getespacodisponivelkb()/1024/100; /*Método que busca o número de série do HD*/ public String getnumeroserie(){ return this.numeroserie; public String tostring(){ return "HD Numero de Serie: "+this.getnumeroserie()+"\n"+super.tostring(); CD: public class CD extends MemoriaS {/*Início da classe CD que estende MemóriaS*/ public static final int ABERTO =1;/*constante que define o estado como aberto*/ public static final int FECHADO=2; /*constante que define o estado como fechado*/ protected int estado; /*Método construtor. Recebe como parâmetro o total que deve ser gravado e a unidade.*/ public CD(int newtotal, int newunidade){ super(newtotal, newunidade); this.estado=aberto; /*Método que reescreve o método abstrato da classe pai. Retorna o espaço real disponível em KB*/ public double getespacodisponivelrealkb() { return this.getespacodisponivelkb()-super.getutilizadokb(); /*Método que reescreve o método abstrato da classe pai. Retorna a perda na gravação*/ public double getperda() { return this.getespacodisponivelkb()*0.02; 6

/*Método que reescreve o método da classe pai. Utilizado para gravar recebendo como parâmetro o tamanho.*/ public boolean GravaKB(int newtamanho){ if(this.estado==aberto){ if(super.gravakb(newtamanho)){ this.estado=2; return true; else return false; else return false; /*Método que busca o estado (aberto ou fechado)*/ public String getestado(){ if(this.estado==aberto) return "ABERTO"; else return "FECHADO"; public String tostring(){ return "CD Estado: "+this.getestado()+"\n"+super.tostring(); Para criar a classe MemóriaTeste clique com o botão direito na pasta src do projeto, New/ JUnit Test Case, como mostra a figura 4. Figura 4 MemoriaTeste: import junit.framework.test; import junit.framework.testcase; /*Início da classe de teste*/ 7

public class MemoriaTeste extends TestCase implements Test{ /*Método construtor que utiliza o construtor da classe pai TestCase*/ public MemoriaTeste() { super(); /*Método utilizado para sinalizar o início da classe de teste*/ protected void setup() { System.out.println("Iniciando..."); /*Método que vai testar o método GravaKB das classes CD e HD. Repare na assinatura do método. Não retorna nada e o nome do método começa sempre com test. */ public void testgravakb(){ CD cd = new CD(10000, 2); /*Método assertequals. Nesse caso recebe como parâmetro dois atributos booleanos. Um é o retorno do método GravaKB e o outro é o retorno esperado caso a implementação do método esteja certa.*/ assertequals(cd.gravakb(10000), true); assertequals(cd.gravakb(10001), false); HD hd = new HD("01", 1000, 2); assertequals(hd.gravakb(1000), true); assertequals(hd.gravakb(1001), false); /*Método que sinaliza o final do processo de teste desfazendo o trabalho do método steup().*/ protected void teardown(){ System.out.println("Finalizando..."); Seguindo todos os passos corretamente, agora teste o seu JUnit. Clique com o botão direito na classe MemoriaTeste Run As/ JUnit Test. Figura 5 8

Conclusão O teste de unidade é importante na construção de métodos, pois permite ao programador testá-los durante a construção do sistema garantindo com isso a implementação de métodos livres de erros lógicos, que ocorrem com muita freqüência. Por possibilitar os testes antes da conclusão do sistema, o programador pode testar seus métodos separadamente assim que eles estejam prontos. Isso evita que o programador fique percorrendo o código inteiro para descobrir os erros lógicos que apareciam quando o programa já estava pronto. Referências http://www.javafree.org/content/view.jf?idcontent=213%a0 http://www.junit.org/ http://www.novatec.org/emjorge 9