SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Parte 2 Ismael Soares
Add Item Nota Fiscal Item  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– éapropriadoparatestarestado Mock– é apropriadoparatestarcomportamento
Exemplo - estado classOrderStateTester... 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 - comportamento classOrderInteractionTester... 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 Spy Verificação de comportamento efetuado (tudo roda) A unidade sob teste é chamada O spy captura informações O teste verifica se elas estão corretas
Test Mock Especificação do comportamento esperado (falha cedo) O mock é carregado com as chamadas esperadas A unidade sob teste é chamada – se algo der errado os testes falham
Quemprecisa de tantosdublêsquando se tem o mock?  Mock O multi-usodos testes
Nemsempre o mais “fácil”  é o melhor!
Entãodevoser Classista ou Mockista?
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 contexto Háinterações entre osobjetos? Estasinteraçõessãoimportantes? A quantidade e a ordem das interaçõessãorelevantes? Use MOCK Casocontrárioconsidere a possibilidade de usaroutrosdublês
Reutilização Seráqueistoqueestoufazendonãoseráutilemoutrasocasiões?
Nãocomplique! Procure fazer as coisas o maislegívelpossível
Vantagens de usardublês ,[object Object]
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,[object Object]
EasyMock

Weitere ähnliche Inhalte

Was ist angesagt?

Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesFAFICA
 
[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catchLoiane Groner
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9PeslPinguim
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13Carlos Santos
 

Was ist angesagt? (6)

Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch[Curso Java Basico - Exceptions] Aula 47: try, catch
[Curso Java Basico - Exceptions] Aula 47: try, catch
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Ficha teorica aula_input_reader
Ficha teorica aula_input_readerFicha teorica aula_input_reader
Ficha teorica aula_input_reader
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 

Ähnlich wie Dubles de Testes - Na Pratica

Ähnlich wie Dubles de Testes - Na Pratica (20)

TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
JUnit
JUnitJUnit
JUnit
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojo
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 

Mehr von Ismael

TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilTDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilIsmael
 
Introducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIntroducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIsmael
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 
Bluesoft Culture
Bluesoft CultureBluesoft Culture
Bluesoft CultureIsmael
 
Como dar e receber feedbacks
Como dar e receber feedbacksComo dar e receber feedbacks
Como dar e receber feedbacksIsmael
 
Eficiencia de fluxo
Eficiencia de fluxoEficiencia de fluxo
Eficiencia de fluxoIsmael
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017Ismael
 
Como ter Entregas Frequentes
Como ter Entregas FrequentesComo ter Entregas Frequentes
Como ter Entregas FrequentesIsmael
 
JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4Ismael
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do ÁgilIsmael
 
Boas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesBoas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesIsmael
 
8 passos para mudança de John Kotter
8 passos para mudança de John Kotter8 passos para mudança de John Kotter
8 passos para mudança de John KotterIsmael
 
Curva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossCurva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossIsmael
 
DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016Ismael
 
7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider AgilIsmael
 
Law of demeter
Law of demeterLaw of demeter
Law of demeterIsmael
 
Junit Lambda
Junit LambdaJunit Lambda
Junit LambdaIsmael
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos TestesIsmael
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - EstrategiasIsmael
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1Ismael
 

Mehr von Ismael (20)

TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilTDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
 
Introducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIntroducao ao Pensamento Sistemico
Introducao ao Pensamento Sistemico
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 
Bluesoft Culture
Bluesoft CultureBluesoft Culture
Bluesoft Culture
 
Como dar e receber feedbacks
Como dar e receber feedbacksComo dar e receber feedbacks
Como dar e receber feedbacks
 
Eficiencia de fluxo
Eficiencia de fluxoEficiencia de fluxo
Eficiencia de fluxo
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017
 
Como ter Entregas Frequentes
Como ter Entregas FrequentesComo ter Entregas Frequentes
Como ter Entregas Frequentes
 
JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do Ágil
 
Boas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesBoas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros Macetes
 
8 passos para mudança de John Kotter
8 passos para mudança de John Kotter8 passos para mudança de John Kotter
8 passos para mudança de John Kotter
 
Curva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossCurva da Mudança Kubler-Ross
Curva da Mudança Kubler-Ross
 
DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016
 
7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil
 
Law of demeter
Law of demeterLaw of demeter
Law of demeter
 
Junit Lambda
Junit LambdaJunit Lambda
Junit Lambda
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos Testes
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - Estrategias
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1
 

Dubles de Testes - Na Pratica

  • 1. Parte 2 Ismael Soares
  • 2.
  • 3.
  • 4. Add Item Nota Fiscal Item Produto Cliente
  • 5.
  • 6. Os métodos de um Dummy Nunca podem ser chamados
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. Como causar a Exception?
  • 12.
  • 13.
  • 14. Como testar uma String (HTML) gerada dinâmicamente?
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22. Mocks ou Stubs?
  • 23. No artigo: “Mocks aren’t Stubs”, Martin Fowler explica: Stub– éapropriadoparatestarestado Mock– é apropriadoparatestarcomportamento
  • 24. Exemplo - estado classOrderStateTester... 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(); } }
  • 25. Exemplo - comportamento classOrderInteractionTester... 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()); } }}
  • 26. Mocks ou Spys?
  • 27. Test Spy Verificação de comportamento efetuado (tudo roda) A unidade sob teste é chamada O spy captura informações O teste verifica se elas estão corretas
  • 28. Test Mock Especificação do comportamento esperado (falha cedo) O mock é carregado com as chamadas esperadas A unidade sob teste é chamada – se algo der errado os testes falham
  • 29. Quemprecisa de tantosdublêsquando se tem o mock? Mock O multi-usodos testes
  • 30. Nemsempre o mais “fácil” é o melhor!
  • 32. O estilo TDD clássicoutilizaobjetosreaisquandopossível e um similar no casocontrário. Um praticante do TDD Mockista, sempreiráutilizar um mock paraqualquerobjetoquetenha um comportamentointeressante.
  • 33. Mas o ideal é ficar com as diferenças. Nãoserextremo!
  • 35. Analise o contexto Háinterações entre osobjetos? Estasinteraçõessãoimportantes? A quantidade e a ordem das interaçõessãorelevantes? Use MOCK Casocontrárioconsidere a possibilidade de usaroutrosdublês
  • 37. Nãocomplique! Procure fazer as coisas o maislegívelpossível
  • 38.
  • 39. Acelera preparação ou execução dos testes
  • 40. Permite testar mesmo que alguma componente não esteja pronta ou disponível
  • 41.
  • 45.
  • 47.
  • 48. Links Imagens http://www.rethinkware.com/download/attachments/557237/testesunitarios.JPG?version=1&modificationDate=1274749852384 http://www.yogodoshi.com/blog/wp-content/uploads/hacker2.jpg http://3.bp.blogspot.com/__8RKQKezcsk/TQee5_GRrEI/AAAAAAAABtk/-RNZUvv3Boo/s1600/0000+ideia.jpg http://www.corposaudavel.net/wp-content/uploads/beneficios-laranja.jpg http://dojofloripa.wordpress.com/2006/10/17/trabalhando-com-stubs/ http://i.s8.com.br/images/sport/cover/img2/21203992_4.jpg http://www.stanford.edu/group/storytelling/cgi-bin/joomla/images/stories/Impostor.jpg http://www.mxmasters.com.br/wp-content/uploads/2010/02/falso2.jpg http://cdn.osabetudo.com/wp-content/uploads/2011/06/o_pensador_do_seculo_xxi_474185-257x300.jpg http://alliancecoaching.files.wordpress.com/2009/10/multi-tarefa.png http://www.guiadariviera.com.br/images/rivieraReciclagem/setas.jpg
  • 49. 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 Bravo http://ccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-3-1-Dubles-AgilCoop-Verao2009.pdf Livro: xUnit Patterns http://xunitpatterns.com/Test%20Spy.html