TDD usual abordagem normal é BOTTOM-UP não é necessário nenhum projeto anterior.

Slides:



Advertisements
Apresentações semelhantes
Utilitários Marco Antonio. Enum Como o nome sugere, é uma enumeração de opções para uma determinada situação A principal vantagem é limitar as opções.
Advertisements

Classes C++ Class nome da classe { private: membros privados
Projeto 1.
7 Abstração Genérica Unidades genéricas e instanciação.
Classes e objetos P. O. O. Prof. Grace.
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.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Execução de testes: driver e stub
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
POO - I PROF.: JEAN CARLO MENDES
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Testes de Interface de Usuário AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão Hugo Corbucci.
Padrões de Testes Automatizados Curso de Verão IME/USP Hugo Corbucci
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Objetos Dublês AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Testes de Unidade Curso de Verão IME/USP Hugo Corbucci
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.
Gerência de Arquivos.
Façade Definição: Quando usar? Tipo de padrão? Como? estrutural.
Polimorfismo e suas aplicações em C++.
Valéria Maria Lauande Março/2010
6 – Testes Unitários "Apenas duas coisas são infinitas: o universo e a estupidez humana. E eu não tenho certeza do primeiro.“ - Albert Einstein.
Tuplas CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA
(baseado em slides de ex-alunos)
Introdução Java.
Introdução OO.
Linguagens de Programação Conceitos e Técnicas
Programação Orientada a Objetos
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
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.
Java: Interfaces Alcides Calsavara.
"Apenas duas coisas são infinitas: o universo e a estupidez humana
Criação e manipulação de objetos
Testes e Qualidade de Software
Edson Susumu Asaga JavaBeans Edson Susumu Asaga
Programação Orientada a Objetos
4 CONCEITOS BÁSICOS EM POO
Javascript, Introdução
Programação Orientada a Objetos
Desenvolvimento em Camadas
Aula 22 Modularização 22/10/08.
Elaborando as Interfaces Aulas 37, 38 e 39.
Segunda parte do curso de Computação Paralela
Rosemary Silveira Filgueiras Melo
Elaborando as Interfaces Aulas 43, 44 e 45
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Prof.: Bruno Rafael de Oliveira Rodrigues
Filas Prof. Kariston Pereira
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?
Leonardo M G Gallardo Trilha: Testes
Tipos Primitivos de Dados
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Ordenando Coleções A Classe Collections.
Automatizando documentações de APIs em Kotlin
Percorrendo coleções com Iterator
Remote Method Invocation (RMI) Sistemas Distribuídos.
Transcrição da apresentação:

TDD usual abordagem normal é BOTTOM-UP não é necessário nenhum projeto anterior

Mocks Técnica usada por alguns grupos em TDD Favorece o uso de uma abordagem TOP- DOWN ao invés do BOTTOM-UP Deve-se ter em mente um esboço *básico* da arquitetura do sistema (mesmo que incompleta e que venha a mudar)

O que é um Mock? Mock é um objeto ”falsificado” Segue a mesma interface do objeto que ele quer falsificar Usuário do Mock não pode saber quando está usando um

Asserções em Mocks Asserções em Mocks são chamadas de Expectativas (expectations) As Expectativas são asserções a respeito: de quais métodos deve ser chamado do número de vezes que um método é invocado de qual o parâmetro que o método deve receber da ordem em que os métodos são invocados Também é possível expressar qual valor será retornado pelo método do Mock

Mocks X Stubs Stubs são parecidos com Mocks Também são um objeto falsificado Qual a diferença? Expectativas.

Como usar? Existe a classe A que se está testando Classe A depende da Classe B Para testar utilizando Mock: Crie um Mock da Classe B. Isto é, um objeto com mesma interface contendo expectativas. Intencie A e faça-o utilizar o Mock realize as operações sobre o objeto verifique que as expectativas foram obedecidas

Exemplo clássico: Observador/Observável public class TesteObservador { private final class ObservadorMock implements Observador { private boolean recebeuNotificacao = false; public void notificar() { recebeuNotificacao = true; } public boolean recebeuNotificacao() { return recebeuNotificacao; }... }

Exemplo clássico: Observador/Observável private Observavel public void observavelCadastradoÉNotificadoApósNotificacaoSerDisparada() { ObservadorMock o = new ObservadorMock(); observavel.cadastrarObservador(o); observavel.dispararNotificacao(); assertTrue(o.recebeuNotificacao()); }

Exemplo clássico: public void aoSerCadastradoObservadorNãoÉNotificado() { ObservadorMock o = new ObservadorMock(); observavel.cadastrarObservador(o); assertFalse(o.recebeuNotificacao()); }

Exemplo clássico: public void doisObservavelCadastradosSãoNotificadoApósNotificacaoSerDispar ada() { ObservadorMock o1 = new ObservadorMock(); ObservadorMock o2 = new ObservadorMock(); observavel.cadastrarObservador(o1); observavel.cadastrarObservador(o2); observavel.dispararNotificacao(); assertTrue(o1.recebeuNotificacao()); assertTrue(o2.recebeuNotificacao()); }

Exemplo clássico: Observador/Observável public class Observavel { private List observadores = new ArrayList (); public void cadastrarObservador(Observador o) { observadores.add(o); } public void dispararNotificacao() { for (Observador o : observadores) o.notificar(); }

Vantagens Foca-se apenas na classe que está sendo testada Fácil gerar exceções ou comportamentos de difícil ocorrência em um objeto real Pode acelerar os testes Mock pode substituir um objeto que acessa disco, faz consultas a bancos de dados, ou qualquer outra tarefa lenta

Desvantagens Modificação na interface pública pode causar inconsistências pode causar falhas mesmo que erros não existam Pode tornar código de teste mais difícil de manter Acarreta complexidade Como fazer com que o Mock seja utilizado pelo objeto? Bugs na integração de duas ou mais classes se tornam mais comuns

Como fazer em Java Não é necessário criar Mocks ”na mão” Java possui diversas bibliotecas de para a criação de Mocks, ex: Jmock ( Easy Mock Curiosidade: feito utilizando Reflexão e Instrumentação de bytecode Chamados de Dynamic Mocks

Mesmo exemplo usando public class TesteObservador { private Mockery context = new JUnit4Mockery(); private Observavel public void criarObservavel() { observavel = new Observavel(); }... }

Mesmo exemplo usando public void observavelCadastradoÉNotificadoApósNotificacaoSerDisparada() { final Observador o = context.mock(Observador.class); observavel.cadastrarObservador(o); context.checking(new Expectations() {{ one (o).notificar(); }}); observavel.dispararNotificacao(); }

Mesmo exemplo usando public void aoSerCadastradoObservadorNãoÉNotificado() { final Observador o = context.mock(Observador.class); context.checking(new Expectations() {{ never(o).notificar(); }}); observavel.cadastrarObservador(o); }

Mesmo exemplo usando public void doisObservavelCadastradosSãoNotificadoApósNotificacaoSerDisparada() { final Observador o1 = context.mock(Observador.class); final Observador o2 = context.mock(Observador.class); observavel.cadastrarObservador(o1); observavel.cadastrarObservador(o2); context.checking(new Expectations() {{ one(o1).notificar(); one(o2).notificar(); }}); observavel.dispararNotificacao(); }

Maiores detalhes sobre JMock JMock é uma DSL (Domain Specific Language) para a criação de mocks Há como especificar: retornos ordem número de vezes que um método será invocado etc.