Dubles de Testes - Na Pratica

Post on 11-Jun-2015

1.369 views 6 download

description

Nesta segunda parte da apresentação, Ismael explica como e quando utilizar cada Duble de Teste. No Final, faz comparações e conclui com dicas valiosas para serem usadas no dia-a-dia.

Transcript of Dubles de Testes - Na Pratica

Parte 2

Ismael Soares

Nota Fiscal Item

Produto Cliente

Add Item

Os métodos de um Dummy

Nunca podem ser chamados

Como causar a Exception?

Como testar uma String (HTML) gerada dinâmicamente?

Mocks ou

Stubs?

No artigo: “Mocks aren’t Stubs”, Martin Fowler explica:

Stub – é apropriado para testar estado

Mock – é apropriado para testar comportamento

public interface MailService { public void send (Message msg);

}

public class MailServiceStub implements MailService { private List<Message> messages = new ArrayList<Message>(); public void send (Message msg) { messages.add(msg); }

public int numberSent() { return messages.size(); }}

Exemplo - estado

class OrderStateTester... public void testOrderSendsMailIfUnfilled() { Order order = new Order(TALISKER, 51); MailServiceStub mailer = new MailServiceStub(); order.setMailer(mailer); order.fill(warehouse); assertEquals(1, mailer.numberSent()); }

class OrderInteractionTester... public void testOrderSendsMailIfUnfilled() {

Order order = new Order(TALISKER, 51); Mock warehouse = mock(Warehouse.class); Mock mailer = mock(MailService.class); order.setMailer((MailService) mailer.proxy());

mailer.expects(once()).method("send"); warehouse.expects(once()).method("hasInventory") .withAnyArguments() .will(returnValue(false));

order.fill((Warehouse) warehouse.proxy()); }}}

Exemplo - comportamento

Mocks ou

Spys?

Verificação de comportamento efetuado (tudo roda)

1. A unidade sob teste é chamada

2.O spy captura informações

3.O teste verifica se elas estão corretas

Test Spy

Test Mock

Especificação do comportamento esperado (falha cedo)

1.O mock é carregado com as chamadas esperadas

2.A unidade sob teste é chamada – se algo der errado os testes falham

Quem precisa de tantos dublês quando

se tem o mock?

Mock O multi-uso dos testes

Nem sempre o mais “fácil” é o melhor!

Então devo ser

Classista ou

Mockista?

O estilo TDD clássico utiliza objetos reais quando possível e um similar no caso contrário.

Um praticante do TDD Mockista, sempre irá utilizar um mock para qualquer objeto que tenha um comportamento interessante.

Mas o ideal é ficar com as diferenças.

Não ser extremo!

Como escolher?

Analise o contexto

Há interações entre os objetos?

Use MOCK

Estas interações são importantes?

A quantidade e a ordem das interações são relevantes?

Caso contrário considere a possibilidade de usar outros dublês

Reutilização

Será que isto que estou fazendo não será util em outras ocasiões?

Não complique!

Procure fazer as coisas o mais legível possível

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

Ferramentas para criar dublêsGenéricas:

Jmock EasyMockMockitoPowerMockJMockit

Específicas de APIsMockrunnerEJBMockSpringUnit

FakesWeb containers leves, BDs / ORMs

emmemória, HTMLUnit

Links Imagens

http://www.rethinkware.com/download/attachments/557237/testesunitarios.JPG?version=1&modificationDate=1274749852384http://www.yogodoshi.com/blog/wp-content/uploads/hacker2.jpghttp://3.bp.blogspot.com/__8RKQKezcsk/TQee5_GRrEI/AAAAAAAABtk/-RNZUvv3Boo/s1600/0000+ideia.jpghttp://www.corposaudavel.net/wp-content/uploads/beneficios-laranja.jpghttp://dojofloripa.wordpress.com/2006/10/17/trabalhando-com-stubs/http://i.s8.com.br/images/sport/cover/img2/21203992_4.jpghttp://www.stanford.edu/group/storytelling/cgi-bin/joomla/images/stories/Impostor.jpghttp://www.mxmasters.com.br/wp-content/uploads/2010/02/falso2.jpghttp://cdn.osabetudo.com/wp-content/uploads/2011/06/o_pensador_do_seculo_xxi_474185-257x300.jpghttp://alliancecoaching.files.wordpress.com/2009/10/multi-tarefa.pnghttp://www.guiadariviera.com.br/images/rivieraReciclagem/setas.jpg

Referências

Artigo do Martin Fowler (Mocks Aren't Stubs)http://www.infoq.com/br/articles/mocks-Arent-Stubs#4

Curso de verão com Mariana Bravohttp://ccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-3-1-Dubles-AgilCoop-Verao2009.pdf

Livro: xUnit Patternshttp://xunitpatterns.com/Test%20Spy.html