Parte 2<br />Ismael Soares<br />
Add Item<br />Nota Fiscal<br />Item <br />Produto <br />Cliente<br />
Os métodos de um Dummy <br />Nunca podem ser chamados<br />
Como causar a Exception?<br />
Como testar uma String (HTML) gerada dinâmicamente?<br />
Mocks <br />ou <br />Stubs?<br />
No artigo: “Mocks aren’t Stubs”, Martin Fowler explica:<br />Stub– éapropriadoparatestarestado<br />Mock– é apropriadopara...
Exemplo - estado<br />classOrderStateTester...<br />publicvoidtestOrderSendsMailIfUnfilled() {<br />Orderorder = new Order...
Exemplo - comportamento<br />classOrderInteractionTester...<br />publicvoidtestOrderSendsMailIfUnfilled() {<br />Orderorde...
Mocks <br />ou <br />Spys?<br />
Test Spy<br />Verificação de comportamento efetuado (tudo roda)<br />A unidade sob teste é chamada<br />O spy captura info...
Test Mock<br />Especificação do comportamento esperado (falha cedo)<br />O mock é carregado com as chamadas esperadas<br /...
Quemprecisa de tantosdublêsquando se tem o mock? <br />Mock<br />O multi-usodos testes<br />
Nemsempre o mais “fácil” <br />é o melhor!<br />
Entãodevoser<br />Classista<br />ou<br />Mockista?<br />
O estilo TDD clássicoutilizaobjetosreaisquandopossível e um similar no casocontrário.<br />Um praticante do TDD Mockista, ...
Mas o ideal é ficar com as diferenças. <br />Nãoserextremo!<br />
Como escolher?<br />
Analise o contexto<br />Háinterações entre osobjetos?<br />Estasinteraçõessãoimportantes?<br />A quantidade e a ordem das ...
Reutilização<br />Seráqueistoqueestoufazendonãoseráutilemoutrasocasiões?<br />
Nãocomplique!<br />Procure fazer as coisas o maislegívelpossível<br />
Vantagens de usardublês<br /><ul><li> 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</li></li></ul><li>Ferramentasparacriardublês<br />Genéricas:<br /><ul><li>Jmock
EasyMock
Próximos SlideShares
Carregando em…5
×

Dubles de Testes - Na Pratica

1.630 visualizações

Publicada em

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.

Publicada em: Tecnologia, Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.630
No SlideShare
0
A partir de incorporações
0
Número de incorporações
43
Ações
Compartilhamentos
0
Downloads
19
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Dubles de Testes - Na Pratica

  1. 1. Parte 2<br />Ismael Soares<br />
  2. 2.
  3. 3.
  4. 4. Add Item<br />Nota Fiscal<br />Item <br />Produto <br />Cliente<br />
  5. 5.
  6. 6. Os métodos de um Dummy <br />Nunca podem ser chamados<br />
  7. 7.
  8. 8.
  9. 9.
  10. 10.
  11. 11. Como causar a Exception?<br />
  12. 12.
  13. 13.
  14. 14. Como testar uma String (HTML) gerada dinâmicamente?<br />
  15. 15.
  16. 16.
  17. 17.
  18. 18.
  19. 19.
  20. 20.
  21. 21.
  22. 22. Mocks <br />ou <br />Stubs?<br />
  23. 23. No artigo: “Mocks aren’t Stubs”, Martin Fowler explica:<br />Stub– éapropriadoparatestarestado<br />Mock– é apropriadoparatestarcomportamento<br />
  24. 24. Exemplo - estado<br />classOrderStateTester...<br />publicvoidtestOrderSendsMailIfUnfilled() {<br />Orderorder = new Order(TALISKER, 51);<br />MailServiceStubmailer = new MailServiceStub();<br />order.setMailer(mailer);<br />order.fill(warehouse);<br />assertEquals(1, mailer.numberSent());<br /> }<br />public interface MailService {<br />publicvoidsend (Messagemsg);<br />}<br />publicclassMailServiceStubimplementsMailService {<br />privateList<Message> messages = new ArrayList<Message>();<br />publicvoidsend (Messagemsg) {<br />messages.add(msg);<br /> }<br />publicintnumberSent() {<br />returnmessages.size();<br /> }<br />} <br />
  25. 25. Exemplo - comportamento<br />classOrderInteractionTester...<br />publicvoidtestOrderSendsMailIfUnfilled() {<br />Orderorder = new Order(TALISKER, 51);<br />Mockwarehouse = mock(Warehouse.class);<br />Mockmailer = mock(MailService.class);<br />order.setMailer((MailService) mailer.proxy());<br />mailer.expects(once()).method("send");<br />warehouse.expects(once()).method("hasInventory")<br /> .withAnyArguments()<br /> .will(returnValue(false));<br />order.fill((Warehouse) warehouse.proxy());<br /> }<br />}} <br />
  26. 26. Mocks <br />ou <br />Spys?<br />
  27. 27. Test Spy<br />Verificação de comportamento efetuado (tudo roda)<br />A unidade sob teste é chamada<br />O spy captura informações<br />O teste verifica se elas estão corretas<br />
  28. 28. Test Mock<br />Especificação do comportamento esperado (falha cedo)<br />O mock é carregado com as chamadas esperadas<br />A unidade sob teste é chamada – se algo der errado os testes falham<br />
  29. 29. Quemprecisa de tantosdublêsquando se tem o mock? <br />Mock<br />O multi-usodos testes<br />
  30. 30. Nemsempre o mais “fácil” <br />é o melhor!<br />
  31. 31. Entãodevoser<br />Classista<br />ou<br />Mockista?<br />
  32. 32. O estilo TDD clássicoutilizaobjetosreaisquandopossível e um similar no casocontrário.<br />Um praticante do TDD Mockista, sempreiráutilizar um mock paraqualquerobjetoquetenha um comportamentointeressante.<br />
  33. 33. Mas o ideal é ficar com as diferenças. <br />Nãoserextremo!<br />
  34. 34. Como escolher?<br />
  35. 35. Analise o contexto<br />Háinterações entre osobjetos?<br />Estasinteraçõessãoimportantes?<br />A quantidade e a ordem das interaçõessãorelevantes?<br />Use MOCK<br />Casocontrárioconsidere a possibilidade de usaroutrosdublês<br />
  36. 36. Reutilização<br />Seráqueistoqueestoufazendonãoseráutilemoutrasocasiões?<br />
  37. 37. Nãocomplique!<br />Procure fazer as coisas o maislegívelpossível<br />
  38. 38. Vantagens de usardublês<br /><ul><li> Isola testes de unidade (bug em uma unidade não afeta testes da outra)
  39. 39. Acelera preparação ou execução dos testes
  40. 40. Permite testar mesmo que alguma componente não esteja pronta ou disponível
  41. 41. Evita efeitos colaterais indesejáveis</li></li></ul><li>Ferramentasparacriardublês<br />Genéricas:<br /><ul><li>Jmock
  42. 42. EasyMock
  43. 43. Mockito
  44. 44. PowerMock
  45. 45. JMockit</li></ul>Específicas de APIs<br /><ul><li>Mockrunner
  46. 46. EJBMock
  47. 47. SpringUnit</li></ul>Fakes<br /><ul><li>Web containers leves, BDs / ORMsemmemória, HTMLUnit</li></li></ul><li>
  48. 48. Links Imagens<br />http://www.rethinkware.com/download/attachments/557237/testesunitarios.JPG?version=1&modificationDate=1274749852384<br />http://www.yogodoshi.com/blog/wp-content/uploads/hacker2.jpg<br />http://3.bp.blogspot.com/__8RKQKezcsk/TQee5_GRrEI/AAAAAAAABtk/-RNZUvv3Boo/s1600/0000+ideia.jpg<br />http://www.corposaudavel.net/wp-content/uploads/beneficios-laranja.jpg<br />http://dojofloripa.wordpress.com/2006/10/17/trabalhando-com-stubs/<br />http://i.s8.com.br/images/sport/cover/img2/21203992_4.jpg<br />http://www.stanford.edu/group/storytelling/cgi-bin/joomla/images/stories/Impostor.jpg<br />http://www.mxmasters.com.br/wp-content/uploads/2010/02/falso2.jpg<br />http://cdn.osabetudo.com/wp-content/uploads/2011/06/o_pensador_do_seculo_xxi_474185-257x300.jpg<br />http://alliancecoaching.files.wordpress.com/2009/10/multi-tarefa.png<br />http://www.guiadariviera.com.br/images/rivieraReciclagem/setas.jpg<br />
  49. 49. Referências<br />Artigo do Martin Fowler (Mocks Aren't Stubs)<br />http://www.infoq.com/br/articles/mocks-Arent-Stubs#4<br />Curso de verão com Mariana Bravo<br />http://ccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-3-1-Dubles-AgilCoop-Verao2009.pdf<br />Livro: xUnit Patterns<br />http://xunitpatterns.com/Test%20Spy.html<br />

×