Parte 2Ismael Soares
Add ItemNota FiscalItem Produto Cliente
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– éapropriadoparatestarestadoMock– é apropriadoparatestarcomportamento
Exemplo - estadoclassOrderStateTester...publicvoidtestOrderSendsMailIfUnfilled() {Orderorder = new Order(TALISKER, 51);MailServiceStubmailer = new MailServiceStub();order.setMailer(mailer);order.fill(warehouse);assertEquals(1, mailer.numberSent());  }public interface MailService {publicvoidsend (Messagemsg);}publicclassMailServiceStubimplementsMailService {privateList<Message> messages = new ArrayList<Message>();publicvoidsend (Messagemsg) {messages.add(msg); }publicintnumberSent() {returnmessages.size(); }}
Exemplo - comportamentoclassOrderInteractionTester...publicvoidtestOrderSendsMailIfUnfilled() {Orderorder = new Order(TALISKER, 51);Mockwarehouse = mock(Warehouse.class);Mockmailer = 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());  }}}
Mocks ou Spys?
Test SpyVerificação de comportamento efetuado (tudo roda)A unidade sob teste é chamadaO spy captura informaçõesO teste verifica se elas estão corretas
Test MockEspecificação do comportamento esperado (falha cedo)O mock é carregado com as chamadas esperadasA unidade sob teste é chamada – se algo der errado os testes falham
Quemprecisa de tantosdublêsquando se tem o mock? MockO multi-usodos testes
Nemsempre o mais “fácil” é o melhor!
EntãodevoserClassistaouMockista?
O estilo TDD clássicoutilizaobjetosreaisquandopossível e um similar no casocontrário.Um praticante do TDD Mockista, sempreiráutilizar um mock paraqualquerobjetoquetenha um comportamentointeressante.
Mas o ideal é ficar com as diferenças. Nãoserextremo!
Como escolher?
Analise o contextoHáinterações entre osobjetos?Estasinteraçõessãoimportantes?A quantidade e a ordem das interaçõessãorelevantes?Use MOCKCasocontrárioconsidere a possibilidade de usaroutrosdublês
ReutilizaçãoSeráqueistoqueestoufazendonãoseráutilemoutrasocasiões?
Nãocomplique!Procure fazer as coisas o maislegívelpossível
Vantagens de usardublê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áveisFerramentasparacriardublêsGenéricas:Jmock
EasyMock

Dubles de Testes - Na Pratica