Dubles de Testes - Na Pratica
-
Upload
ismael -
Category
Technology
-
view
1.369 -
download
6
description
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