(baseado em slides de ex-alunos)

Slides:



Advertisements
Apresentações semelhantes
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Advertisements

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005.
Walfredo Cirne walfredo.dsc.ufpb.br
Classes & Objectos em JAVA5
Classes e objetos P. O. O. Prof. Grace.
JUnit “Keep the bar green to keep the code clean” JUnit Site.
Implementação Orientada a Objetos – Aula 03
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Execução de testes: driver e stub
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
TDD usual abordagem normal é BOTTOM-UP não é necessário nenhum projeto anterior.
1 / AgileBrazil 2011 Melhorando a Qualidade dos Códigos de Teste Maurício Eduardo
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
Objetos Dublês AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
(baseado em slides de ex-alunos)
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Introdução OO.
Linguagens de Programação Conceitos e Técnicas
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
TQS - Teste e Qualidade de Software (Software Testing and Quality) Análise de cobertura de testes com a ferramenta Coverlipse.
João Pascoal Faria TQS - Teste e Qualidade de Software (Software Testing and Quality) Análise de cobertura de código com.
TQS - Teste e Qualidade de Software (Software Testing and Quality) Test-Driven Development João Pascoal Faria
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Singleton Definição: Quando usar? Tipo de padrão? Como? estrutural.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
POO - Classes Dilvan Moreira.
(baseado em slides de ex-alunos)
Java: Interfaces Alcides Calsavara.
Singleton e Template Method
Programador/a de Informática
TQS - Teste e Qualidade de Software (Software Testing and Quality) Test Driven Devlopment Experiment João Pascoal Faria.
Criação e manipulação de objetos
Introdução à programação orientada por objetos
Testes e Qualidade de Software
Edson Susumu Asaga JavaBeans Edson Susumu Asaga
Programação Orientada a Objetos
Técnicas de Programação
Elaborando as Interfaces Aulas 37, 38 e 39.
Remote Method Invocation
Wrappers.
Programação Orientada a Objetos*
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
Programação Orientada a Objetos
Usando JUnit.
Rosemary Silveira Filgueiras Melo
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Teste de Software 04: Que parte devo testar?
Tipos Primitivos de Dados
RESULUÇÃO DOS EXERCÍCIOS,
Programação Orientada a Objetos
RESULUÇÃO DOS EXERCÍCIOS E
Percorrendo coleções com Iterator
Programação de Computadores II
Transcrição da apresentação:

(baseado em slides de ex-alunos) TQS - Teste e Qualidade de Software (Software Testing and Quality) Mock Objects João Pascoal Faria jpf@fe.up.pt www.fe.up.pt/~jpf (baseado em slides de ex-alunos)

Índice Definição Quando usar Detalhes técnicos Exemplo prático Frameworks Exemplo com jMock 2

Definição Objectos simulados que imitam o comportamento de objectos reais de um modo controlado [wikipedia] Criam-se para fazer testes ao comportamento de outros objectos Tal como os crash test dummies são usados nos testes de automóveis

Quando usar Quando o objecto real... ainda não existe retorna um resultado não determinístico Hora Actual, Temperatura Actual tem estados difíceis de atingir um erro da rede precisa de incluir informação e métodos exclusivamente para uso nos testes e não para a sua tarefa é lento uma base de dados completa que tenha que ser inicializada antes do teste

Detalhes técnicos Permitir que o objecto que o invoca não saiba se está a usar um objecto real ou um mock object Têm a mesma interface que os objectos que simulam Ambos implementam a mesma interface Mock object estende objecto real

Resultado não determinístico Exemplo prático public class Convert { … public static double getTemperatureInCelcius(City city){ double tempF; Sensor sensor = city.getSensor(); tempF = sensor.getCurrentTemperature(); //Convert Fahreneit to Celsius degrees return (tempF-32.0)*(5.0/9.0); } Classe City não existe Resultado não determinístico

Exemplo prático (continuação) public class Convert { … public static double getTemperatureInCelcius(City city){ double tempF; Sensor sensor = city.getSensor(); tempF = sensor.getCurrentTemperature(); return (tempF-32.0)*(5.0/9.0); } public class MockSensor extends Sensor { … public double getCurrentTemperature() { //MOCK return 72.5; } Resultado conhecido (=22.5ºC)

Exemplo prático (continuação) public class Convert { … public static double getTemperatureInCelcius(City city){ double tempF; Sensor sensor = city.getSensor(); tempF = sensor.getCurrentTemperature(); return (tempF-32.0)*(5.0/9.0); } public class MockCity implements City { … private Sensor curSensor; public Sensor getSensor() { //MOCK return curSensor; } public void setSensor(Sensor s){ this.curSensor = s; Escrever método para controlar valor de retorno

Exemplo prático (continuação) public class TestConvert extends TestCase { public void testGetTemperatureInCelcius() { MockCity city = new MockCity(); MockSensor sensor = new MockSensor(); city.setSensor(sensor); assertEquals(22.5, Convert.getTemperatureInCelcius(city)); }

Em suma… Escrever classes mock Estender classe real Implementar interface Implementar todos os seus métodos Reescrever (overwrite) os métodos a simular Criar e executar teste

Frameworks Facilitam e tornam mais rápida a criação dos Mock Objects Não é necessário escrever o código das classes mock Permitem criação a partir de: Interfaces Classes Permitem definir expectativas flexíveis Número de chamadas a métodos Valores de retorno Valores dos parâmetros Lançamento de excepções Integram com JUnit (Java), NUnit (.Net), etc. Fornecem normalmente APIs extensíveis

Frameworks Java C# jMock (http://www.jmock.org) EasyMock (http://www.easymock.org) rMock (http://rmock.sourceforge.net) MockCreator (http://mockcreator.sourceforge.net) MockLib (http://mocklib.sourceforge.net) C# MockLib (http://sourceforge.net/projects/mocklib) Rhino Mocks (http://www.ayende.com/) NMock (http://nmock.org)

Frameworks Ruby Outras linguagens Mocha (http://mocha.rubyforge.org) RSpec (http://rspec.rubyforge.org) FlexMock (http://onestepback.org/software/flexmock) Outras linguagens C++ Javascript Perl Python ActionScript …

Exemplo com jMock 2 – código a testar Classe City não existe public class Convert { public static double getTemperatureInCelcius(City city){ double tempF; Sensor sensor = city.getSensor(); tempF = sensor.getCurrentTemperature(); //Convert Fahreneit to Celsius degrees return (tempF-32.0)*(5.0/9.0); } Resultado não determinístico public interface City { Sensor getSensor(); } Não implementados! // Nesta versão de jMock só faz "mocks" de interfaces public interface Sensor {double getCurrentTemperature();}

Exemplo com jMock 2 – código de teste import org.jmock.integration.junit3.MockObjectTestCase; import org.jmock.Expectations; public class JMockTestConvert extends MockObjectTestCase { // set up final City mockCity = mock(City.class); final Sensor mockSensor = mock(Sensor.class); public void testGetTemperatureInCelcius() { // expectations checking(new Expectations() {{ one(mockCity).getSensor(); will(returnValue(mockSensor)); one(mockSensor).getCurrentTemperature(); will(returnValue(72.5)); }}); // execute double result = Convert.getTemperatureInCelcius(mockCity); // test assertEquals(22.5, result); }

Exercício Com base na rotina de conversão de um número para extenso (ver “Extensos.java”), desenvolver (segundo a abordagem TDD) na mesma classe Extensos uma método estático MoneyExt(double m, Currency c) para converter um valor monetário m para extenso em maiúsculas. O 2º argumento é uma instância de uma interface que define métodos para obter a designação por extenso da unidade monetária e fracções no singular e plural (exemplo: euro, euros, cêntimo, cêntimos), bem como o número de dígitos a usar na parte fraccionária (exemplo: 2), de acordo com a seguinte sintaxe (em Java usar String em vez de string): public interface Currency { string getCurrencyNamePlural(); string getCurrencyNameSingular(); string getFractionsNameSingular(); string getFractionsNamePlural(); int getFractionsDigits(); } Criar uma mock class MockCurrency que implementa a interface Currency só para efeitos de teste. Repetir usando um framework como o jMock, em vez de criar uma mock class

Referências e mais informação www.jmock.org www.mockobjects.com