Objetos Dublês. Mariana Bravo AgilCoop Cursos de Verão 2009

Documentos relacionados
Objetos Dublês. AgilCoop Cursos de Verão Mariana Bravo IME/USP

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

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Padrões de Testes Automatizados

Injeção de Dependências e Spring

Strings e Arrays POO

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

J820. Mock objects. Testes de código com dependências. argonavis.com.br. Helder da Rocha

TRATAMENTO DE EXCEÇÕES

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Programação Orientada a Objetos II

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Programação Orientada a Objetos

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Tratamento de Exceções

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Programação Orientada a Objetos SANTOS, Rafael (PLT)

6. Estudo de Caso: Caixa Automático

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

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

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

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

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

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

Engenharia de Software

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

4 Conceito de Herança

Engenharia de Software

Linguagem de Programação II Implementação

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Exceções. Criando suas exceções

Programação Java. Tratamento de Exceções

Escreva em Java a classe NumeroComplexo que represente um número complexo. A classe deverá ter os seguintes construtores:

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

Metodologias de Teste de Software

9/24/2014. Prof. André Backes

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc.

Manipulação de arquivos. João Paulo Q. dos Santos

Testes Automatizados. Cursos de Verão 2007 IME/USP Dairton Bassi & Paulo Cheque

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

Tratamento de Exceções

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Programação de Computadores II TCC /Turma A 1

Engenharia de Software

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

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

Testes de Interface de Usuário

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Lista de Linguagens de Programação 18

Padrões de Testes Automatizados

CETEC Centro Paula Souza


LISTA DUPLAMENTE ENCADEADA

Aula 13 POO 1 Tratamento de Exceções no Java. Profa. Elaine Faria UFU

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Padrão de projeto de software

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Análise e Projeto Orientados a Objetos

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Herança (parte 2) Redefinição de métodos AULA 11

Programação Orientada a Objetos

Código-Fonte da Prática 02

Palavras Reservadas da Linguagem Java

Só podem ser executados por uma Thread que detenha o lock do objecto

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI CCO002 Engenharia de Software

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação de Computadores II

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

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

DATA ACCESS OBJECT (DAO)

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

Tipos de dados e comandos POO

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

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Reader e Writer para streams de caracteres (texto).

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA CONTROLE DE ENTRADA E SAÍDA DE DADOS JAVA.

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

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Modificadores de Acesso e Atributos de Classe

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

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

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

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

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Transcrição:

Objetos Dublês Mariana Bravo marivb@agilcoop.org.br AgilCoop Cursos de Verão 2009

Motivação Testes de unidade focam em uma unidade Mas as unidades do sistema têm dependências entre si Dublês oferecem uma maneira de isolar as dependências

Dependências Entrada indireta dados que a unidade de teste obtém de algum objeto do qual ela depende (atributo de instância, parâmetro, etc). Saída indireta resultados esperados da unidade de teste que não podem ser conferidos apenas pelo valor de retorno. Efeitos colaterais.

Definição Um dublê de teste é uma especialização de alguma componente da qual a unidade testada depende

Tipos de dublês Dummy object: permite a criação/execução do teste Test stub: provê informações para a unidade sob teste Test spy: captura e armazena chamadas indiretas Mock object: verifica chamadas indiretas e provê dados Fake object: contém uma implementação falsa de um componente real

Exemplo Dummy Object Pedido Item construído com Produto Cliente No teste do Pedido, quero verificar que a adição de um produto funciona: pedido.adicionaquantidade(produto, 1); assertequals(1, pedido.getitens().size()); assertequals(itemesperado, itens.get(0)); Para criar o Pedido preciso de um Cliente, mas o Cliente não é usado para adição de Produto

Dummy Object Permite a realização do teste por satisfazer alguma chamada Mas não é usado em nenhum momento pela unidade sob teste

Exemplo Test Stub A classe FormatadorDeTempo provê a hora atual em diversos formatos. public String horaatualporescrito() { Calendar agora = Calendar.getInstance(); if (agora.get(calendar.hour_of_day) == 0) return "Meia noite"; else if (agora.get(calendar.hour_of_day) == 12) return "Meio dia"; else return agora.get(calendar.hour_of_day) + " horas"; } Como testar esse método?

Test Stub Permite controlar a entrada indireta da unidade testada, fornecendo dados que poderiam ser difíceis de obter com o componente real

Exemplo Test Stub Sabotador Algumas vezes queremos testar fluxos excepcionais do programa. Consideremos o código: public void leinformacao(reader reader) { try { while (reader.read()!= 0) { // Processa informação lida // e armazena de alguma forma } } catch (IOException e) { // Trata exceção } } Como testar se o tratamento da exceção está correto?

Exemplo Test Spy Continuando o exemplo anterior: catch (IOException e) { // Trata exceção logger.log("erro lendo arquivo", e); } Como fazer para testar que o erro é logado corretamente?

Test Spy Captura informações sobre os efeitos colaterais provocados pela unidade sob teste, para que o teste verifique se estão corretos

Outro Exemplo Test Spy Tenho uma classe Desenho que deve notificar observadores quando ela é modificada public void adicionafigura(figura figura) { figuras.add(figura); setchanged(); notifyobservers(figura); } Como testar?

Exemplo Mock Object Mesmo exemplo anterior! Mas outra maneira de testar.

Mock Object Verifica diretamente os efeitos colaterais causados pela unidade sob teste

Test Spy vs. Mock Object Test Spy: verificação de comportamento efetuado (tudo roda) A unidade sob teste é chamada O spy captura informações O teste verifica se elas estão corretas Mock Object: especificação do comportamento esperado (falha cedo) O mock é carregado com as chamadas esperadas A unidade sob teste é chamada se algo der errado os testes falham

Tipos de Mock Object Estrito: Espera as mesmas chamadas exatamente na mesma ordem que especificado Tolerante: Aceita qualquer ordem das chamadas, inclusive com chamadas a mais ou a menos

Exemplo com EasyMock A partir do exemplo anterior!

Exemplo Fake Object BufferedReader do Java lê linha por linha. Queremos um Reader especial que leia um parágrafo inteiro (sequência de linhas não vazias). public class ReaderEspecial extends BufferedReader { } public MeuReaderEspecial(Reader in) { super(in); } public String readline() throws IOException; public String readparagraph() throws IOException; public boolean isover() throws IOException; Como testar sem precisar ler um arquivo?

Fake Object Substitui funcionalidade real com uma implementação alternativa. Emula o comportamento do componente real, com características amigáveis ao teste. Não é controlado nem observado pelo teste.

Fake Object - Motivos Componente real ainda não existe Componente real não está disponível no ambiente de teste Componente real é muito demorado Componente real causa efeitos colaterais indesejáveis

Instalando o dublê Uma vez que o dublê foi instanciado e configurado, precisamos fazer a unidade sob teste usá-lo. Existem diversas maneiras de fazer isso, a escolha pode depender de gosto ou de necessidade.

Injeção de dependência O cliente (ou teste) fornece à unidade sob teste o componente do qual ela depende. Por um setter Por um parâmetro Pelo construtor

Lookup de dependência A unidade sob teste pede a algum componente que crie ou encontre o objeto do qual ela precisa. Fábrica de objetos: cria o componente real, é informada pelo teste se deve devolver o componente de teste Service locator: obtém de alguma forma o objeto a ser utilizado, pode ser configurado pelos testes para devolver o dublê desejado

Vantagens de usar dublês Isola testes de unidade (bug em uma unidade não afeta testes da outra) Acelera preparação ou execução dos testes Permite testar mesmo que alguma componente não esteja pronta ou disponível Evita efeitos colaterais indesejáveis

Fim Perguntas?