Top Banner
BT Nossa equipe de colaboradores Sobre nós Sobre você Purpose Index Novidades sobre: Disseminando conhecimento e inovação em desenvolvimento de software corporativo. Texto a pesquisar Login En | 中文 | 日本 | Fr | Brasil Desenvolvimento Destaques de: Desenvolvimento Escalando e levando sua aplicação ao topo com Hazelcast e Spring Java .Net Cloud Computing Mobile HTML 5 JavaScript Ruby DSLs Python PaaS
25

Mocks Não São Stubs

Sep 25, 2015

Download

Documents

Gleyson Sampaio

Mocks Não São Stubs
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 1/25

    BT

    NossaequipedecolaboradoresSobrensSobrevocPurposeIndex

    Novidadessobre:

    Disseminandoconhecimentoeinovaoemdesenvolvimentodesoftwarecorporativo.

    Textoapesquisar

    Login

    En|||Fr|Brasil

    Desenvolvimento

    Destaquesde:Desenvolvimento

    EscalandoelevandosuaaplicaoaotopocomHazelcasteSpring

    Java.NetCloudComputingMobileHTML5JavaScriptRubyDSLsPythonPaaS

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 2/25

    Aapresentaotemcomoobjetivodescrevercomoimplementarummecanismodecachedeobjetosparamelhoriadedesempenhodeaplicaescorporativas.SeroapresentadasaarquiteturaetopologiadomecanismousandoHazelcasteSpringcomdiagramasdearquiteturaedemonstraesdecdigo.

    VertodosdeDesenvolvimentoArquiteturaeDesign

    Destaquesde:ArquiteturaeDesign

    Arquiteturaerefatorao

    Seuappestnoarjfazumtempo,osusuriosgostamequeremmaisfeatures.Semproblemas,spormaisumaclasseaqui,ummtodoali.Masvocnotinhaprevistoapossibilidadedoseuappterquefuncionaremmaisdeumpas,essaoutraclassefoifeitanacorreriaeestmeio"estranha",porqueessemodeloestmostrandoumpopup?!Sevocnuncapassouporissoacredite,aindavai.

    VertodosdeArquiteturaeDesignProcessosePrticas

    ModelagemPerformance&EscalabilidadeBDDAOPDesignPatternSeguranaCloudComputingSOA

    AgileLeadershipTcnicasgeisMetodologias

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 3/25

    Destaquesde:ProcessosePrticas

    Agilidade,culturaeorganizaes

    Nestaentrevista,ManoelPimentelnostrazsuaexperinciasobreotema"AgilidadeemGrandesEmpresas".Eleexplicaqualoestadoatual,asdificuldadeseosdesafiosenfrentadospelasmetodologiasgeisemambientesdegrandesempresas.Almdisso,nostrazumavisosobrecomoasmetodologiasvisamatenderaosrequisitosdessasempresas.

    VertodosdeProcessosePrticasOperaeseInfraestrutura

    Destaquesde:OperaeseInfraestrutura

    IntegraoContnuaLean/KanbanClienteseRequisitos

    Performance&EscalabilidadeCloudComputingVirtualizaoServidoresdeAplicao

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 4/25

    DevOpsemTelecom:possvel?

    UmartigorecentedaCATechnologieslanaumolharsobrecomoDevOpsestavanandoemvriasindstriasdeformaamelhoraravelocidadenaformacomopublicamosnossassoluesemambientesdedesenvolvimentogil.

    VertodosdeOperaeseInfraestruturaArquiteturaCorporativa

    Destaquesde:ArquiteturaCorporativa

    CompiladorescomoServio:GarantiadeCdigosmaisLimpos,RpidoseLeves

    ConheaoprojetoRoslyn,quepodermodificarprofundamenteaformacomonosrelacionamoscomcompiladores.Oquetornaoprojetoinovadorque,almdocompilador,tambmdisponibilizadaumaAPIquepermiteinfluenciartodooprocessodecompilaodesdeaanlisesintticaatageraodocdigobinrio.

    VertodosdeArquiteturaCorporativa

    QConRio201524a28deagosto

    ArquiteturaCorporativaBPMBusiness/ITAlignmentIntegration(EAI)GovernanaWeb2.0SOA

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 5/25

    AgileJavaMobileHTML5JavaScriptCloudComputing

    TodosostpicosVocestaqui:IncioArtigosMocksnosoStubs

    MocksnosoStubsPostadoporMartinFowlerem01Out2009|3Dsuaopinio

    Compartilhar

    |

    "Marcarcomofavorito""Favoritos"

    ltimaatualizaosignificante:02deJaneirode2007

    Otermo'MockObjects'tornousepopularparadescreverumcasoespecialdeobjetosqueimitamobjetosreaisparateste.Amaioriadaslinguagensdeambienteagoratemframeworksquefacilitamacriaodemockobjects.Oquemuitasvezesnorealizado,entretanto,oquemockobjectsso,masumaformadeobjetodetesteemumcasoespecial,umaformaquepermiteumestilodiferentedeteste.Nesteartigoeuexplicareicomoosmockobjectsfuncionam,comoelesfazemtestesbaseadonaverificaodecomportamentoecomoacomunidadeemtornodeleusamparadesenvolverumestilodiferentedeteste.

    ParaleroartigooriginalescritoporMartinFowlercliqueaqui.

    TestesRegularesTestescomMockObjectsUsandoEasyMockAdiferenaentreMockseStubs

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 6/25

    TesteClssicoeMockistaEscolhendoEntreasDiferenasTDDDirigidoFixtureSetupIsolamentodeTesteAcoplamentodosTestesImplementaoEstilodeDesignEntoeudevoserumclassicistaouummockista?ConsideraesfinaisLeituraComplementarHistricodeReviso

    Aprimeiravezquemedepareicomotermo'mockobject'foihalgunsanosnacomunidadeXP.Desdeento,meucontatocommockobjectsstemseintensificado.UmpoucopelofatodequemuitosdosprincipaisdesenvolvedoresdemockobjectsforammeuscolegasnaThoughtWorksemvriosmomentos.UmpoucotambmporquetenhovistomockobjectscadavezmaisfrequentementenasliteraturassobretestescombaseemXP.

    Masapesardisso,nogeraleutenhovistopoucasboasdescriessobremockobjects.Emparticular,vejoqueelesmuitasvezessoconfundidoscomstubsobjetosparaauxiliarnotestesdeambientes.Eucompreendoestaconfusoeumesmoosacheibemsemelhantesporumtempotambm,masalgumasconversascomosdesenvolvedoresdemocksmepossibilitaramumacompreensomaiorsobreoassunto.

    Adiferena,naverdade,duasdiferenasseparadas.Porumladohadiferenadecomoosresultadosdostestessoverificados:umadistinoentreverificaodeestadoeverificaodecomportamento.Poroutroladoesttodaumadiferenafilosficasobrecomoasatividadesdetestesedesigninteragementresi,queeucostumochamardeestilosclssicoemockistadeTestDrivenDevelopment.

    (Emumaprimeiraversodesteartigo,eujtinhanoodessasdiferenasmascombineiasduasjuntas.Comoentoaprimoreimelhormeuentendimentosobreisto,horadeatualizaresteartigo.Sevocnotiverlidoaversoanterior,apenasignoreestasconsideraes,poiseuescreviesteartigocomosesuaversoanteriornoexistisse.Massetivertidocontatocomaversoanteriordesteartigo,vocpodeacharinteressanteverqueeuquebreiaantigadicotomiadetestesbaseadosemestadosetestesbaseadoseminteraonadicotomiadeverificaodeestado/comportamentoenadeTDDclssico/mockist.TambmajusteimeuvocabulrioparacorrespondercomodolivroxUnitpatternsdeGerardMeszaro.

    Voltaraotopo

    TestesRegulares

    Vouilustrarestesdoisestiloscomumexemplosimples.(umexemploemJava,masosprincpiossoaplicveisaqualquerlinguagemorientadaaobjetos.)QueremosobterumobjetoOrder(Pedido)epreenchloapartirdeumobjetoWarehouse(Estoque).Pedidoumobjetomuitosimples,comapenasumnicoprodutoeumaquantidade.Jumobjetodepositocontmconjuntosdediferentesprodutos.Quandosolicitamosaumobjetopedidoquepreenchaasimesmoapartirdeumobjetoestoque,hentoduassituaespossveis.Seoestoquecontiverprodutososuficienteparapreencheropedido,opedidopreenchidoeototaldeprodutosnoestoquereduzidopelaquantidadeemquesto.Senohouverprodutosnoestoque,entoopedidonopreenchidoenadaacontececomoestoque.

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 7/25

    Estesdoiscomportamentosdemandamumpardetestes,parecidoscomostestesconvencionaisdoJUnit.

    publicclassOrderStateTesterextendsTestCase{privatestaticStringTALISKER="Talisker";privatestaticStringHIGHLAND_PARK="HighlandPark";privateWarehousewarehouse=newWarehouseImpl();

    protectedvoidsetUp()throwsException{warehouse.add(TALISKER,50);warehouse.add(HIGHLAND_PARK,25);}publicvoidtestOrderIsFilledIfEnoughInWarehouse(){Orderorder=newOrder(TALISKER,50);order.fill(warehouse);assertTrue(order.isFilled());assertEquals(0,warehouse.getInventory(TALISKER));}publicvoidtestOrderDoesNotRemoveIfNotEnough(){Orderorder=newOrder(TALISKER,51);order.fill(warehouse);assertFalse(order.isFilled());assertEquals(50,warehouse.getInventory(TALISKER));}

    TestesnopadroxUnitseguemumasequnciatpicadequatrofases:configura,exercita,verifica,finaliza.Nestecaso,afasedesetupfeitaparcialmentepelomtodosetUp(configurandooestoque)eparcialmentepelomtododeteste(configurandoopedido).Achamadaorder.fillafasedeexerccio.aquiondedefinimosoobjetoafazeraquiloquequeremostestar.Asdeclaraesassertentosoafasedeverificao,conferindoseomtodoexercitadoexecutousuatarefacorretamente.Nestecaso,nohumafasedefinalizaoexplcita,ocoletordelixodoambiente(garbagecollector)faztudoparansimplicitamente.

    Duranteafasedesetuphdoistiposdeobjetosqueestamoscolocandojuntos.Pedidoaclassequeestamostestando,masparaqueachamadaorder.fillfuncione,precisamostambmdeumainstnciadeumestoque.Nestasituao,oPedidooobjetoqueofocodoteste.Pessoasorientadaatestesgostamdeusartermoscomoobjectundertestousystemundertestnessescasos.Sodoissotermosumpoucorebuscados,mascomosolargamenteusados,entotambmaceitopassivamenteuslos.DeacordocomMeszaros,ireiusar"SystemUnderTest"ouaabreviaoSUT.

    Ento,paraestetesteeuprecisodoSUT(Order)edeumcolaborador(warehouse).Precisodowarehousepordoismotivos:oprimeirofazercomqueocomportamentotestadofuncionecomoumtodo(umavezqueorder.fillchamamtodosdowarehouse,eosegundoqueelenecessrioparaverificao(jqueumdosefeitosdachamadaaorder.fillumapotencialalteraonoestadodewarehouse).Conformeexplorarmosestetpicoaindamaisfrente,vocvaiverquevamosfazerumagrandedistinoentreSUTecolaboradores.(NaversoanteriordesteartigoeumereferiaaoSUTcomo"objetoprimrio"eaoscolaboradorescomo"objetossecundrios")

    Esteestilodetesteusaverificaodeestado:oquesignificaquensdeterminamosseomtodoexercitadofuncionoucorretamenteexaminandooestadodoSUTedeseuscolaboradoresdepoisdaexecuodomtodo.Comoveremos,mockobjectspermitemumaabordagemdiferentedeverificao.

    Voltaraotopo

    TestescomMockObjects

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 8/25

    Agoraeuvouintroduzirumcomportamentoeusarosmockobjects.Nessecdigo,estouusandoabibliotecajMock,parajava,paradefinirosmocks.Existemoutrasbibliotecasparamocks,masessaumabematualizadaequefoiescritapelosidealizadoresdessatcnica.Assim,umaboaopoparacomear.

    publicclassOrderInteractionTesterextendsMockObjectTestCase{privatestaticStringTALISKER="Talisker";

    publicvoidtestFillingRemovesInventoryIfInStock(){//setupdataOrderorder=newOrder(TALISKER,50);MockwarehouseMock=newMock(Warehouse.class);//setupexpectationswarehouseMock.expects(once()).method("hasInventory").with(eq(TALISKER),eq(50)).will(returnValue(true));warehouseMock.expects(once()).method("remove").with(eq(TALISKER),eq(50)).after("hasInventory");

    //exerciseorder.fill((Warehouse)warehouseMock.proxy());//verifywarehouseMock.verify();assertTrue(order.isFilled());}

    publicvoidtestFillingDoesNotRemoveIfNotEnoughInStock(){Orderorder=newOrder(TALISKER,51);Mockwarehouse=mock(Warehouse.class);warehouse.expects(once()).method("hasInventory").withAnyArguments().will(returnValue(false));

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

    assertFalse(order.isFilled());}

    ConcentreseprimeiroemtestFillingRemovesInventoryIfInStock,jqueeupegueialgunsatalhoscomoltimoteste.

    Paracomear,afasedesetupmuitodiferente.Elaestdivididaemduaspartes:dadoseexpectativas.Apartededadosajustaosobjetoscomosquaisnsestamosinteressadosemtrabalhar.Nessesentido,elasemelhanteaosetuptradicionaldedados.Adiferenaestnosobjetoscriados.OSUTomesmoumpedido.Entretantoocolaboradornoumobjetoestoque.ummockdoestoquetecnicamenteumainstnciadaclasseMock.

    Asegundapartedosetupcriaasexpectativassobreomockobject.AsexpectativasindicamquaismtodosdeveriamserchamadosnosmocksquandooSUTexercitado.

    QuandotodasasexpectativasestiveremcodificadaseuexercitooSUT.Depoisdoexerccioeufaoaverificao,quetemdoisaspectos.EurodoosassertsnoSUTdamesmamaneiraqueantes.Entretantoeuverificotambmosmockschecandoseelesforamchamadosdeacordocomasexpectativas.

    Aprincipaldiferenaaquicomonsverificamosseopedidofezacoisacertaemsuainteraocomoestoque.Comaverificaodeestadonsfazemosissopelosassertscontraoestadodoestoque.Os

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 9/25

    mocksusamaverificaodecomportamento,ondenoscertificamosqueopedidofezaschamadascorretasaoestoque.Nsfazemosessachecagemdizendoaomockoqueesperamosduranteafasedesetupepedindoparaeleprprioverificarduranteaverificao.Apenasopedidochecadausandoosasserts,eseomtodonomudaoestadodopedido,entonoexistenenhumassert.

    Nosegundotesteeufaoalgumascoisasdiferentes.Primeiroeucrioomockdeumjeitodiferente,usandoomtodomockemMockObjectTestCaseaoinvsdenoconstrutor.EsteummtodonabibliotecajMockparanossaconvenincia,quesignificaqueeunovouprecisarchamarexplicitamenteomtodoverifymaistarde.Qualquermockcriadoporessemtodoautomaticamenteverificadoaofinaldoteste.Eudeveriaterfeitoissonoprimeirotestetambm,maseupreferimostraraverificaomaisexplicitamenteparavercomofuncionamostestescommocks.

    AsegundadiferenanosegundocasodetestequeeurelaxeiasrestriesnaexpectativausandowithAnyArguments.Arazodissoqueoprimeirotestechecaseonmerofoipassadoparaoestoque.Entoosegundotestenoprecisarepetiresseitemdoteste.Sealgicadopedidoprecisarmudarmaistarde,entoapenasumtestevaifalhar,facilitandooesforodeajustarostestes.Comovocpodeperceber,eupoderiaterdeixadowithAnyArgumentscompletamentedefora,jqueassimodefault.

    Voltaraotopo

    UsandoEasyMock

    Humbomnmerodebibliotecasdemockobjectpora.UmqueeutenhovistorazoavelmenteoEasyMock,emversesjavae.NET.EasyMocktambmpossibilitaverificaodecomportamento,mastemalgumasdiferenasemestilocomjMockquevalemapenadiscutir.Aquiestoostestesfamiliaresnovamente:

    publicclassOrderEasyTesterextendsTestCase{privatestaticStringTALISKER="Talisker";privateMockControlwarehouseControl;privateWarehousewarehouseMock;publicvoidsetUp(){warehouseControl=MockControl.createControl(Warehouse.class);warehouseMock=(Warehouse)warehouseControl.getMock();}

    publicvoidtestFillingRemovesInventoryIfInStock(){//setupdataOrderorder=newOrder(TALISKER,50);//setupexpectationswarehouseMock.hasInventory(TALISKER,50);warehouseControl.setReturnValue(true);warehouseMock.remove(TALISKER,50);warehouseControl.replay();

    //exerciseorder.fill(warehouseMock);//verifywarehouseControl.verify();assertTrue(order.isFilled());}

    publicvoidtestFillingDoesNotRemoveIfNotEnoughInStock(){

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 10/25

    Orderorder=newOrder(TALISKER,51);

    warehouseMock.hasInventory(TALISKER,51);warehouseControl.setReturnValue(false);warehouseControl.replay();

    order.fill((Warehouse)warehouseMock);

    assertFalse(order.isFilled());warehouseControl.verify();}}

    EasyMockusaumametforarecord/replayparadefinirexpectativas.Paracadaobjetoquevocquiserfazermockvoccriaumcontroleummockobject.Omocksatisfazainterfacedoobjetosecundrio,ocontroltedcaractersticasadicionais.Paraindicarumaexpectativavocchamaomtodo,comosargumentosquevocesperanomock.Aseguirvocchamaocontrolsequiserumvalorderetorno.Umavezquevocterminoudedefinirexpectativasvocchamareplaynocontrolnestepontoomockterminaagravaoeestprontopararesponderaoobjetoprimrio.Umavezprontovocchamaverifynocontrol.

    Parecequeenquantoaspessoasnormalmentetemreceioemumprimeiromomentopelametforarecord/replay,elasrapidamenteseacostumamcomela.ElatemumavantagemsobreasrestriesdojMockdadoquevocestfazendochamadasreaisdemtodoparaomockaoinvsdeespecificarnomesdemtodoemstrings.IssosignificaquevocpodeusarcodecompletionnasuaIDEequalquerrefactoringdenomedemtodovaiautomaticamenteatualizarostestes.Adesvantagemquevocnopodeterasrestriesmaispermissivas.

    OsdesenvolvedoresdojMockestotrabalhandoemumanovaversoquevaiusaroutrastcnicasparapermitirousodechamadasreaisaosmtodos.

    Voltaraotopo

    AdiferenaentreMockseStubs

    Assimquesurgiram,muitaspessoasconfundiramosmockobjectscomanoopadrodautilizaodestubsparatestes.Desdeentoparecequetodostinhamummelhorentendimentodasdiferenas(eesperoqueaversomaisrecentedesteartigotenhaajudado).Entretanto,paracompreendercompletamenteamaneiradeseutilizarmocksimportanteentendermockseoutrostiposdedoublestestes.("doubles"?Noseincomodeseesteumnovotermoparavoc,esperealgunspargrafosetudoficarclaro.)

    Quandoestaplicandotestescomoestes,vocestseconcentrandoemumelementodosoftwareporvezporissootermousualtestesunitrios.Oproblemaqueprafazerumaunidadefuncionar,tambmprecisodasoutrasentoanecessidadedealgumtipodeestoquenonossoexemplo.

    Nosdoisestilosdetestesquemostreiabaixo,oprimeirocasousaumobjetorealdeestoqueeosegundoutilizaumestoquemock,oqueclaro,noumobjetoreal.Utilizarmocksumamaneiradenoutilizarumestoquerealnoteste,masexistemoutrasformasdeutilizarobjetosfictcioscomoeste.

    Ovocabulrioparafalarsobreistologoficaconfuso,todosostiposdepalavrassoutilizados:stubs,mock,fake,dummy.ParaesteartigovouseguirovocabulriodolivrodeGerardMeszaros.Nooquetodosutilizam,masoachoumbomvocabulrioejquesouoescritor,escolhereiquaispalavrasusar.

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 11/25

    MeszarosutilizaotermoTestDoublecomoumtermogenricoparaqualquerobjetofalso,utilizadonolugardeumobjetoreal,parapropsitosdetestes.Onomeveiodosdubls(StuntDouble)dosfilmes.(Umdeseusobjetivoseraevitarutilizarqualquernomequejtenhasidoamplamenteutilizado.)Entoeledefiniuquatrotiposdedubls:

    DummyObjectssorepassadosmasnuncautilizados.Normalmentesousadosparapreencherlistasdeparmetros.FakeObjectstmimplementaesfuncionais,masnormalmenteutilizamalgumatalhoqueostornainadequadosparaproduo(umabasededadosemmemriaumbomexemplo.Stubsprovidenciamrespostasprconfiguradasparaaschamadasfeitasduranteostestes,normalmentenorespondemanadaquenoestejaprogramadoparaoteste.Stubstambmpodemgravarinformaessobreaschamadas,comoumgatewayquelembraasmensagensque'enviou',outalvezapenasquantasmensagens'enviou'.Mockssobrequeestamosfalandoaqui:objetosprprogramadoscominformaesqueformamumaespecificaodaschamadasqueesperamreceber.

    Destestiposdedubls,apenasosmocksinsistemnaverificaodocomportamento.Osoutrospodem,enormalmenteutilizamverificaodeestados.Mockssecomportamcomoosoutrosnafasedeexerccio,jqueprecisamfazeroSUTacreditarqueestofalandocomseusreaiscolaboradoresmasdiferemnasfasesdesetupeverify.

    Paraexplorarmelhorosdubls,precisamosestendernossoexemplo.Muitaspessoasosutilizamapenasseoobjetorealnoestdisponvel.Umcasomaiscomumparaotestecomdublsseriasedissssemosquegostaramosdeenviarumemailsefalhssemosaopreencherumpedido.Oproblemaquenoqueremosenviarmensagensparaclientesduranteostestes.Assim,emvezdissocriaremosumdublparanossosistemadeemails,umquepossamoscontrolaremanipular.

    Aquicomeamosanotarasdiferenasentremocksestubs.Seestivssemosescrevendoumtesteparaestecomportamentodeenviodemensagens,poderamosutilizarumstubtosimplesquantoeste:

    publicinterfaceMailService{publicvoidsend(Messagemsg);}

    publicclassMailServiceStubimplementsMailService{privateListmessages=newArrayList();publicvoidsend(Messagemsg){messages.add(msg);}publicintnumberSent(){returnmessages.size();}}

    Eentopoderamosutilizarverificaodeestadosnostubassim:

    classOrderStateTester...publicvoidtestOrderSendsMailIfUnfilled(){Orderorder=newOrder(TALISKER,51);MailServiceStubmailer=newMailServiceStub();order.setMailer(mailer);order.fill(warehouse);assertEquals(1,mailer.numberSent());}

    Claroqueumtestemuitosimplesverificandoseamensagemfoienviada.Noverificamosseofoiparaapessoacertaouseestavacomocontedocorreto,masservirparailustraroexemplo.

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 12/25

    Aoutilizarmocksotesteterumaformaumpoucodiferente.

    classOrderInteractionTester...publicvoidtestOrderSendsMailIfUnfilled(){Orderorder=newOrder(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());}}

    Nosdoiscasosestouutilizandoumtestedublnolugardeumserviorealdeemail.Adiferenaestnofatodostubusarverificaodeestadosenquantoomockverificacomportamento.

    Paraqueostubfaaaverificaodeestados,precisoescreveralgunsmtodosextras.ComoresultadoeleimplementaMailServicemaspossuimaismtodosdetestes.

    MockObjectssempreutilizamverificaodecomportamento,umstubpodeseguiromesmocaminho.MeszaroschamaosstubsqueutilizamestetipodeverificaocomoTesteEspio.Adiferenaestemcomo,exatamente,odublrodaeefetuaaverificaoedeixareiestadescobertaparavoc.

    Voltaraotopo

    TesteClssicoeMockista

    Agoraestounopontoondepossoexplorarasegundadicotomia:queentreoTDDclssicoeomockista.OXdaquestoaquiquandoutilizarummock(ououtrosimilar).

    OestilodoTDDclssicoutilizaobjetosreaisquandopossveleumsimilarquandonohcondiesdeseutilizaroobjetoreal.Destamaneira,umTDDerclssicopoderiautilizarumobjetoestoquerealeumsimilarparaoserviodeemail.Otipodosimilarnaverdadenointeressatanto.

    UmpraticantedoTDDmockista,poroutrolado,irsempreutilizarummockparaqualquerobjetoquetenhaumcomportamentointeressante.Nestecaso,irutilizarummocktantoparaoestoquequantoparaoserviodeemail.

    Apesardevriosframeworksparamockteremsidoprojetadoscomootipodetestemockistaemmente,muitosclassistasconsideramestesteisparaacriaodeobjetossimilares.

    UmaderivaoimportantedoestilomockistaodoBehaviorDrivenDevelopment(BDD).BDDfoidesenvolvidooriginalmentepelomeucolegaDanNorthcomoumatcnicaparaajudaraspessoasaaprenderTestDrivenDevelopment,focandonocomooTDDoperacomoumatcnicadedesign.Oquenoslevaarenomeartestesparacomportamentos,demaneiraaexplorarmelhorondeoTDDajudacomopensamentodoquefetivamenteoobjetoprecisa.BDDtomaumaabordagemmockista,maselevaialmdisto,tantocomseusestilosdenomenclaturaquantocomseusimpulsosdeintegraranlisejuntotcnica.Nesteartigonovoumuitoalmdisto,sendoqueanicarelevnciaparaesteartigoqueoBDDumaoutravariaodeTDDquetendeautilizartestesmockista.Voudeixarparavocseguirolinkparamaioresinformaes.

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 13/25

    Voltaraotopo

    EscolhendoEntreasDiferenas

    Nesteartigoexpliqueiumconjuntodediferenas:verificaodoestadooudecomportamento/TDDclssicooumockista.Quaissoosargumentosquetemosdeteremmenteaofazeraescolhaentreeles?Vouiniciarcomaescolhadaverificaodoestadoversuscomportamento.

    Aprimeiracoisaaconsiderarocontexto.Nsestamospensandosobreumaassociaofcil,comopedidoeestoque,ouumamaiscomplicada,comopedidoeserviodeemail?

    Seforumaassociaosimplesentoaescolhafcil.SeeusouumTDDerclssicoeunoutilizomock,stubouqualqueroutrosimilar.Euutilizoumobjetorealeverificaodeestado.SesouumTDDermockistaeuutilizoummockeverificaodecomportamento.Semdecises.

    Seforumaassociaoincomum,entonohdecisoumasertomada,sesouummockistaEuutilizosomentemockseverificaodecomportamento.Sesouumclassicistaentoaindatenhoumaescolha,noqueissosejaumbomnegcio.Geralmenteclassicistasirodecidirbaseadoscasoacaso,utilizandoarotamaisfcilparacadasituao.

    Comonsvimos,verificaodeestadovscomportamentonemsempreumgrandedeciso.OmaiorproblemaentreoTDDclssicoeomockista.Apartirdomomentoqueascaractersticasdaverificaodeestadoecomportamentocomearemaafetaradiscusso,entoaquefocareigrandepartedeminhaenergia.

    Masantesqueeufaa,permitameanalisarumcasoextremo.Ocasionalmentevociniciaatividadesquesorealmentedifceisdeutilizarverificaodeestado,mesmoquenosejamassociaescomplexas.Umgrandeexemplodistoocache.AgrandequestosobrecachequevocnopodedizerqualestadoocacheatingiuouperdeuesteumcasoondeaverificaodecomportamentoseriaumaescolhasbiamesmoparaumTDDerclssicoextremista.Tenhocertezaqueexistemoutrasexceesemambasdirees.

    Conformensnosaprofundamosnaescolhadeclssico/mockista,existemumasriedefatoresquedevemosconsiderar,demaneiraquetenhoquebradoestesfatoresemgruposbemrudimentares.

    Voltaraotopo

    TDDDirigido

    MockObjectsvieramdacomunidadeXP,eumadasfuncionalidadesprincipaisdoXPasuanfaseemTestDrivenDevelopmentondeodesigndosistemaevoludoatravsdeiteraesdirigidasporescritadetestes.

    Portanto,nosurpresanenhumaqueosmockistasemparticularfalamsobreoefeitodetestescommocksnodesign.Emparticular,elesdefendemumestilochamadodesenvolvimentodirigidonecessidade.Comesteestilo,vociniciaodesenvolvimentodeumaestriaescrevendoprimeiroumtesteparaoladoexternodoseusistema,fazendoumobjetodeinterfaceparaseuSUT.Pensandonaexpectativadoscolaboradores,vocexploraainteraoentreoSUTeseusvizinhosfazendoodesignefetivodainterfacedesadadoSUT.

    Umavezcomoprimeirotesterodando,assuposiesdadaspelosmocksforneamumdescritivoparaoprximopassoeumpontoinicialparaostestes.Voctornacadasuposioemumtestehelpererepeteoprocessotrabalhandonasuamaneiraparaatenderosistema,comumSUTporvez.Este

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 14/25

    estilotambmreferenciadocomo"deforaparadentro",queumnomemuitodescritivoparaestafuno.Etrabalhamuitobemcomsistemasmulticamadas.VociniciaprimeiroprogramandoaUIutilizandocamadasmockporbaixo.Entoescreveostestesparaacamadamaisbaixa,evaisubindogradualmentepelosistemaumacamadaporvez.Estaumaabordagemmuitocontroladaeestruturada,umaabordagemquemuitaspessoasacreditamsertilparaauxiliarosnovatosemOOeTDD.

    OTDDclssiconoforneceamesmadireo.Vocpodeadotarumaabordagemsimilar,usandomtodosstubaoinvsdemocks.Parafazeristo,semprequeprecisadealgodeumhelper,vocfazumhardcodeexatodasadaqueotesterequerparafazeroSUTfuncionar.Ento,umavezqueotestedocdigoestverde,vocsubstituiasadahardcodedcomocdigoapropriado.

    MasTDDclssicopodefazeroutrascoisastambm.Umestilocomumo"domeioparafora".Nesteestilovocpegaumafuncionalidadeedecideoqueprecisonodomnioparaqueestafuncionalidadefuncione.Vocpegaosobjetosdedomnioparafazeroqueprecisaeumavezqueelesestofuncionando,vocincluiacamadadeUIporcima.Fazendoisto,talvezvocnuncaprecisesimularnada.Muitaspessoasgostamdistoporquefocaaatenonomodelodedomnioprimeiro,oqueajudaaprevenirquealgicadodomniosemisturecomaUI.

    Eudeveriaenfatizarqueambosmockistaseclassicistasfazemistocomumaestriaporvez.Existeumalinhaqueconstriasaplicaescamadaporcamada,noiniciandoumacamadaatqueaoutraestejacompleta.Tantoclassicistasquantomockistastendematerumbackgroundagileepreferemiteraesdebaixagranularidade.Comoresultado,elestrabalhamfuncionalidadeporfuncionalidadeaoinvsdecamadaporcamada.

    Voltaraotopo

    FixtureSetup

    ComTDDclssico,voctemquecriarnosumaSUT,mastambmtodasascolaboraesqueaSUTprecisaemrespostaaoteste.Emboraoexemplostinhaumpardeobjetos,testereaisenvolvemfreqentementeumgrandenmerodeobjetossecundrios.Geralmenteessesobjetossocriadosedestrudosacadaexecuodetestes.

    Testescommock,entretanto,apenasprecisamcriaroSUTemocksparaosvizinhosimediatos.Issopodeevitaralgunsdostrabalhosenvolvidosnaconstruodeumafixturecomplexa(Pelomenosnateoria.Tenhovistosetupsdemocksmuitocomplexos,masdevidoaomauusodasferramentas.)

    Naprtica,testadoresclssicostendemareusaromximopossvelasfixturescomplexas.NaformamaissimplesvocfazissocolocandocdigodesetupdefixturesdentrodomtododesetupxUnit.Fixturesmaiscomplicadasprecisamserusadasporvriasclassesdetestes,entonessecasovoccriaclassesgeradasparaumafixtureespecial.EugeralmentechamoessesdeObjectMothers,baseadonaconvenodenomeusadorecentementeemumprojetoXPdaThoughtWorks.Usarmothersessencialnamaioriadostestesclssicos,masmotherssocdigosadicionaisquenecessitamsermantidosemqualquermudanaquetenhaefeitocascatanostestes.Tambmpodehaverumcustodeperformanceemconfigurarumafixtureemboraeunotenhaouvidofalarqueesseumproblemasrioquandofeitocorretamente.Muitosobjetosfixturessobaratosparacriar,aquelesquenosogeralmenteduplicados.

    Comoumresultadoeuouviosdoisestilosacusandoooutrodetermuitotrabalho.Mockistasdizemquecriaodefixturesumgrandeesforo,masosclssicosdissemqueessereusadomasvoctemquecriarmockscomtodostestes.

    Voltaraotopo

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 15/25

    IsolamentodeTeste

    Sevocintroduzumbugemumsistemacomtestesmocados,geralmenteircausarproblemasnostestesqueaSUTcontmobugparafalhar.Comaabordagemclssica,entretanto,qualquertestedeobjetosclientespodemtambmfalhar,oquelevaafalhasquandooobjetobugadousadoemcolaboraocomoutroobjetodeteste.Comoumresultadoumafalhaemumobjetomuitousadocausaumaondadefalhasnostestesemtodoosistema.

    Testersqueusammocksconsideramessaseramaiorquestoissoresultaemmuitosdebuggingparaacharacausaraizdoerroecorriglo.Entretanto,osclssicosnoexpressamissocomoumafontedoproblema.Geralmenteoculpadorelativamentefcildedetectar,olhandoparaostestesquefalhameosdesenvolvedorespodemdizerqueoutrasfalhassoderivadasdoerroinicial.Almdissosevocesttestandoregularmente(comodeveria)entovocsabequearupturafoicausadapeloquevoceditouporltimo,entonodifcilacharafalha.

    Umfatorquepodesersignificanteaquiagranularidadedostestes.Jqueostestesclssicosexercitammultiplosobjetosreais,vocgeralmenteencontraumnicotestecomoumtesteprimrioparaumclusterdeobjetos,enoapenasum.Seoclusterabrangemuitosobjetos,entopodesermuitomaisdifcildeencontrarafonterealdeumbug.Oqueestacontecendoaquiqueostestesestocomumagranularidademuitogrosseira.

    bastanteprovvelquetestescommocksomenospropensosasofrercomesseproblema,porqueaconvensomocartodosobjetosalmdaprimria,oquedeixaclaroquetestesdegranularidadefinasonecessriosparaacolaboradores.Ditoisso,verdadetambmqueousodetestesexcessivamentegranuladosnonecessariamenteumafalhadetestesclssicoscomoumatcnica,esimumafalhadefazertestesclssicospropriamente.Umaboaregraassegurarquevocseparatestesdegranularidadefinaparatodasasclasses.Enquantoclusterssoasvezesrazoveis,elesdevemserlimitadosamuitopoucosobjetosnomaisquemeiadzia.Emadio,sevocseencontradebugandoumproblemadevidoatestesdegranularidadealta,vocdevedebugardeumamaneiradirigidoateste,criandotestesdegranularidadefina.

    Naessenciatestesxunitclassicosnososomentetestesdeunidade,mastambmumminitestedeintergrao.Comoumresultadomuitaspessoasgostamdofatodequetestesclientespodemcapturarerrosqueostestesprincipaisparaumobjetopodeterperdido,particularmentesondandoreasondeclassesinteragem.Testescommockperdemqualidade.Emadiovoccorreoriscoqueexpectativasnostestescommockpodemestarincorretos,resultandoemtestesdeunidadequepassamverdemasmascaramerrosinerentes.

    nessepontoquedevosalientarquequalquerestilodetestequevocuse,vocdevecombinarcomtestesdeaceitaoqueoperamnosistemainteiro.Eugeralmentevenhodeprojetosqueusaramtardetestesdeaceitaoesearrependeram.

    Voltaraotopo

    AcoplamentodosTestesImplementao

    Quandovocescreveumtestemockista,voctestaaschamadasqueosistemaqueestsendotestado(SUT)realizaparagarantirqueelesecomunicacorretamentecomseuscolaboradores.Umtesteclssicossepreocupacomoestadofinalenocomcomoesseestadofoiatingido.Destaforma,testesmockistassomaisacopladosacomoummtodoimplementado.Mudanasnanaturezadaschamadasparaoscolaboradorescostumamfazercomquetestesmockistasfalhem.

    Esteacoplamentogeraumasriedepreocupaes.Amaisimportanteoefeitosobreotestdriven

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 16/25

    development(TDD).Comtestesmockistas,voccomeaapensarsobreaimplementaodocomportamentoenquantoaindaestescrevendootestenaverdade,testadoresmockistasvemissocomoumavantagem.Testadoresclssicos,noentanto,defendemqueimportantepensarapenassobreoqueacontecedeumpontodevistaexternoedeixarasconsideraessobreimplementaoparadepoisdeterminardeescreveroteste.

    Oacoplamentocomaimplementaotambminterferenahoradorefactoring,umavezquemudanasnaimplementaosomuitomaispropensasaquebrartestesmockistasdoquetestesclssicos.

    Issopodeseragravadopelanaturezadasferramentasdemock.Muitasvezesasferramentasdemockespecificamchamadasdemtodoepassagemdeparmetrosmuitoespecficos,mesmoquandoessascoisasnosorelevantesparaaqueletesteemparticular.UmdosobjetivosdoconjuntodeferramentasjMocksermaisflexvelnaespecificaodasexpectativasparapermitirqueasexpectativaspossamsermais"relaxadas"quandoelasnoimportammuito.Adesvantagemautilizaodestringsparataltarefa,oquepodecomplicarorefactoring.

    Voltaraotopo

    EstilodeDesign

    Paramim,umdosaspectosmaisfascinantesdessesestilosdetestecomoelesafetamasdecisesdedesign.Enquantoeufaleisobreosdoistiposdetestador,percebialgumasdiferenasentreosdiferentesdesignsquecadaestiloincentiva,maseutenhocertezaqueessaanlisebastantesuperficial.

    Eujmencioneiumadiferenadecomocadatestadorlidacomcamadas.Testesmockistasincentivamumaabordagemdeforapradentro,enquantoosdesenvolvedoresquepreferemumestiloiniciandocomomodelodedomniotendemapreferirtestesclssicos.

    Olhandomaisdeperto,noteiqueostestadoresmockistastendemaevitarousodemtodosqueretornamvalores,usandoemvezdissomtodosqueatuamsobreumobjetocoletor.Tomemoscomoexemploumsistemaquecoletainformaesdeumgrupodeobjetosparacriarumastringderelatrio.Umamaneiracomumdefazerissofazercomqueomtododegeraoderelatriofaachamadasamtodosqueretornamstringsdosvriosobjetosemontarastringderelatrioemumavariveltemporria.Umtestadormockistaprovavelmenteiriapassarumstringbufferparaosvriosobjetosefazlosadicionarasdiversasstringsaessebuffertratandoostringbuffercomoumparmetrodecoleta.

    Testadoresmockistasfocammaisemcomoevitar"acidentesdetrem"cadeiasdemtodoscomogetThis().getThat().getTheOther().EvitarcadeiasdemtodostambmconhecidocomoseguiraleideDemeter.Emboraascadeiasdemtodosejamumindciodecdigoruim,oproblemaopostodeusarobjetosintermediriosinchadoscommtodosdeencaminhamentoparamtodosdevariveisinternastambmumindciodequeocdigoestruim.(EusempreacheiquemesentiriamaisconfortvelcomaLeideDemeterseelafossechamadadeSugestodeDemeter).

    Umadascoisasmaisdifceisparaaspessoasentenderememdesignorientadoaobjetosoprincpio"Diga,noPergunte",queencorajaadizerumobjetooquefazeraoinvsdeextrairdadosdeumobjetoparaexecutaratarefanocdigocliente.Osmockistasafirmamqueousodetestesmockistasajudaapromoveresteprincpioeaevitara"festadegetters"quepermeiamuitodocdigoessesdias.Osclssicosargumentamqueexistemmuitasoutrasmaneirasdefazerisso.

    Umproblemaconhecidorelacionadoverificaobaseadaemestadoqueelapodelevarcriaodemtodosdeconsultaapenasparaapoiaraverificao.Nonadaconfortveladicionarmtodos

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 17/25

    APIdeumobjetoapenasparapropsitosdeteste,efazeraverificaocombasenocomportamentoevitaesseproblema.Ocontraargumentoqueessasalteraessogeralmentepequenasnaprtica.

    Osmockistasprefereminterfacesbaseadasempapiseafirmamqueousodesteestilodetesteincentivaisso,jquecadacolaboraomocadaseparadamentee,consequentemente,maissuscetvelasertransformadaemumainterfacebaseadaempapel.Ento,nomeuexemploacimausandoumstringbufferparagerarumrelatrio,ummockistaprovavelmentecriariaumpapelespecialquefazsentidonessedomnio,equepodeserimplementadousandoumstringbuffer.

    importantelembrarqueessadiferenanoestilodedesignumdosmaioresmotivadoresparaamaioriadosmockistas.AorigemdoTDDsedeudevidoaumdesejodeobterbonstestesderegressoautomticaquedessemsuporteaumdesignevolutivo.Aolongodocaminhoseuspraticantesdescobriramqueescreverostestesprimeiroresultavaemumamelhoriasignificativanoprocessodedesign.Osmockistasterumaopiniofortesobrequetipodedesignumbomdesignedesenvolverambibliotecasdemockprincipalmenteparaajudaraspessoasadesenvolveresseestilodedesign.

    Voltaraotopo

    Entoeudevoserumclassicistaouummockista?

    Euachoqueessaumaperguntadifcildeserespondercompropriedade.Pessoalmente,eusempregosteideseroclssicoeantiquadopraticantedeTDDeatagoraeuaindanoencontreinenhumarazoparamudar.EunovejonenhumbenefcioimperdveldeserumpraticantedeTDDmockistaemepreocupocomasconsequnciasdeseatrelartestesimplementao.

    Issoparticularmentemechamouatenoquandoeuobserveiumprogramadormockista.Eurealmentegostodofatodequeaoescreverostestesvocfocanoresultadodocomportamentoenoemcomoeleimplementado.OmockistaestpensandoconstantementeemcomooSUTserimplementadoparapoderescreverasexpectativasIssomeparecemuitoartificial.

    EutambmsofrodadesvantagemdenotentaroTDDmockistaemnadaalmdeprojetosdebrincadeira.ConformeeuaprendidoprprioTestDrivenDevelopment,difciljulgarumatcnicasemtentlaemnadasrio.Euconheovriosdesenvolvedoresquesomockistasbastantesatisfeitoseconvencidos.Entoemboraeuaindasejaumclassicistaconvencido,euprefeririaapresentaroargumentodeambososladosdaformamaisjustaqueeupuderparaquevocpossasedecidirporsis.

    Ento,setestescommockslheapareceatraente,eusugeririatentlo.ValeparticularmenteapenasevocesttendoproblemasemcasosemqueoTDDmockistafoifeitoparaajudar.Euvejoduassituaesprincipaisaqui.Umaquandovocestconstantementedebugandoquandotestesfalhamporqueelesnoestoquebrandodeformaclaraelhedizendoondeestoproblema.(VoctambmpodemelhorarestasituaoutilizandoTDDclssicoouclustersmaisprecisos.)Asegundasituaoseseusobjetosnocontmcomportamentossuficientes.Testescommockspodemencorajaraequipeacriarobjetoscommaiscomportamentos.

    Voltaraotopo

    ConsideraesFinais

    Conformeointeresseemtestesunitrios,emframeworksxunitenoTestDrivenDevelopmentcresceu,maisemaispessoasestoutilizandomocks.Atodomomentoaspessoasaprendemumpouco

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 18/25

    dosframeworksdemocksementenderdeformaclaraadivisoentreodesenvolvimentoclssicoemockistaqueosoriginou.Independentedequeladovoctenda,euachoquetilentenderadiferenaentreeles.Apesardevocnoprecisarserummockistaparaacharosframeworksdemockteis,ajudaentenderopensamentoqueguiamuitasdasdecisesdeprojetodosoftware.

    Arazodesteartigoeraeapontarestasdiferenaseestabeleceroscompromissosquesedevelevaremcontaemcadaum.Hmuitomaisassuntosobreopensamentomockistadoqueeupudeabordaraqui,particularmenteasconseqnciasnoestilodeprojeto.Euesperoquenosprximosanosnsveremosmaismaterialsobreissoequeiraprofundarnossoentendimentodasconseqnciasfascinantesdeseescrevertestesantesdocdigo.

    Voltaraotopo

    LeituraComplementar

    Paraumavisomaiscompletadaprticadetestescomframeworksxunit,acompanheolivrodeGerardMeszaros(aviso:estnaminhasrie).Eletambmtemumwebsitecompadresutilizadosnolivro.

    ParaaprendermaissobreoTDD,oprimeirolugarparaseolharolivrodoKent.

    Paraaprendermaissobreoestilomockistadesetestar,oprimeirolugarparaseolharositemockobjects.comondeoSteveFreemaneoNatPriceadvogamopontodevistamockistacompaperseumblogquevaleapena.Particularmente,leiaoexcelentepaperOOPSLA.ParamaisinformaessobreBehaviorDriverDevelopment,umaprticaumpoucodiferentedoTDDquebastantemockista,comececomaintroduodoDanNorth.

    VoctambmpodeaprendermaissobreestastcnicasaovisitarossitesdasferramentascomojMock,nMock,EasyMockeo.NETEasyMock.(Houtrasferramentasdemock,entonoconsiderequeestalistaestcompleta.)

    OXP2000teveopaperoriginalsobremocks,masjestumpoucodefasado.

    Voltaraotopo

    HistricodeReviso

    02deJaneirode2007:Dividiadistinooriginaldotestebaseadoemestadoversusotestebaseadoeminteraoemdois:estadoversusverificaodecomportamentoeTDDclssicoversusmockista.EutambmfizvriasmudanasnovocabulrioparaalinhlocomolivrodeGerardMeszarosdexunitpatterns08deJulhode2004:PrimeiraPublicao

    Tradutores

    AInfoQBrasilagradecenovamentetodososeditoresqueparticiparamdatraduodesseartigoequelesqueparticipamativamentedatraduodenotciaseartigosparaoInfoQBrasil,nesseartigo:AcyrTedeschi,CarlosMendona,MarceloAndrade,RicardoAlmeida,RicardoYasuda,SamuelCarrijo,ViniciusAssefeWagnerSantos.Obrigadatodos!

    Voltaraotopo

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 19/25

    SeesProcessosePrticasTpicosRhinoRhinoMocksAgileTDDTestesTcnicasgeisJava

    Contedoeditorialrelacionado

    TDDdepoisdomainstream

    Adoodemetodologiasgeis

    AcceptanceTestDrivenDevelopment(ATDD),passoapasso

    TestdrivenInfrastructurenaGlobo.com

    DevOpsnomundoreal

    OlvisitanteVocprecisacadastrarsenoInfoQBrasilouLoginparaenviarcomentrios.Hmuitasvantagensemsecadastrar.

    ObtenhaomximodaexperinciadoInfoQBrasil.

    Dsuaopinio

    Forneaumassunto Mensagem

    HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p

    RecebermensagensdessadiscussoEnviarmensagem

    ComentriosdacomunidadeWatchThreadClssico!byFelipeRodriguesPosted01Out200905:18ParabnsbyPlnioBalduinoPosted12Dez200911:54Re:ParabnsbyFbioMirandaPosted21Dez200906:10

    Clssico!01Out200905:18by"FelipeRodrigues"

    Clssico!

    ResponderVoltaraotopo

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 20/25

    Citarmensagemoriginal

    Parabns12Dez200911:54by"PlnioBalduino"

    Umclssico.Sumasugesto:

    Noprimeiropargrafo(Oquemuitasvezesnorealizado,entretanto,oquemockobjectsso,masumaformadeobjetodetesteemumcasoespecial),euusaria'percebido'ou'notado'aoinvsde'realizado',deacordocomotextooriginal.

    sumasugesto,claro.

    ResponderVoltaraotopo

    Re:Parabns21Dez200906:10by"FbioMiranda"

    muitobom!

    umasugesto:seioquantocomplicadofazertraduodetermostcnicos,masparaotermo"testdoubles",atraduo"dublsdeteste"parecebemapropriadaepraticamenteintuitiva,afinal,mocks,stubs,dummiesefakessonadamaisdoque"dubls"dosobjetosreais.(emcomparaoacomootermousadonocinema,ondeosdublssoosprofissionaisquesubstituemosartistasverdadeirosemcenasperigosas).

    parabnspelatraduo!FbioMirandafabiolnm.blogspot.com

    ResponderVoltaraotopo

    Fechar

    by

    em

    VisualizarResponderVoltaraotopo

    Fechar

    Assunto Suaresposta

    HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p

    RecebermensagensdessadiscussoEnviarmensagem Cancelar

    Fechar

    Assunto Suaresposta

    HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 21/25

    Recebermensagensdessadiscusso

    CancelarFechar

    OK

    Populares10dias40diasSeismeses

    ReactNativeDesenvolvendoaplicaesnativascomJavaScript

    Oestadodaarteemmicroservios

    QConRio2015:eventoampliadoe15palestrantesconfirmados

    DecoratorsdoPythonemprofundidade

    Chrome42DesabilitaaNPAPIePluginsRelacionados:Java,Unity,Silverlight2

    Nashorn:"AarmaocultadoJDK8"noNetflix

    QConSoPaulo2015:resumodasextaedio

    Contedoeducacional

    TodosArtigosApresentaesEntrevistasLivros

    EscalandoelevandosuaaplicaoaotopocomHazelcasteSpring

    AdrianoTavares30Abr,2015

    iOSSpriteKit.Vamosdesenvolverumjogo?EltonMendes30Abr,2015

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 22/25

    Agilidade,culturaeorganizaes

    ManoelPimentel29Abr,2015

    DecoratorsdoPythonemprofundidade

    FelipeVolpone29Abr,2015

    SoluesdeMonetizaoparaAppsCaioOcchini29Abr,2015

    SoftwareDefinedNetworkingeasinovaesemredes

    GustavoPantuza29Abr,2015

    Maisantigos

    Linkspatrocinados

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 23/25

    NewsletterdoInfoQBrasil

    Assinenossanewslettersemanalparaacompanharonovocontedopublicadonositeeoutrosdestaques

    Seuemailaqui Assinar

    Desenvolvimento

    ArunGupta:ReceitasparapublicaraplicaesJavaEEcomDockereKubernetes

    EscalandoelevandosuaaplicaoaotopocomHazelcasteSpring

    Oestadodaarteemmicroservios

    ArquiteturaeDesign

    ArunGupta:ReceitasparapublicaraplicaesJavaEEcomDockereKubernetes

    Oestadodaarteemmicroservios

    QConRio2015:eventoampliadoe15palestrantesconfirmados

    ProcessosePrticas

    Agilidade,culturaeorganizaes

    QConRio2015:eventoampliadoe15palestrantesconfirmados

    RestrospectivasDivertidas

    OperaeseInfraestrutura

    ArunGupta:ReceitasparapublicaraplicaesJavaEEcomDockereKubernetes

    QConRio2015:eventoampliadoe15palestrantesconfirmados

    Chrome42DesabilitaaNPAPIePluginsRelacionados:Java,Unity,Silverlight

    ArquiteturaCorporativa

    Oestadodaarteemmicroservios

    QConRio2015:eventoampliadoe15palestrantesconfirmados

    OSGIrelease6inclueDTOeversionamentoporanotaes

    IncioTodosostpicosConfernciasQConCriarcontaLogin

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 24/25

    QConsMundiaisBeijing2015Apr2325,2015Tokyo2015,April21,2015NewYork2015Jun812,2015RiodeJaneiroAug2428,2015Shanghai,Oct1517,2015SanFranciscoNov1620,2015LondonMar711,2016

    Parceiros

    NewsletterdoInfoQBrasil

    Assinenossanewslettersemanalparaacompanharonovocontedopublicadonositeeoutrosdestaques

    Seuemailaqui Assinar

    SeuRSSpersonalizadoParaatualizaesdiriaseoutrasnovidadesParaatualizaesfrequentesenotciasdacomunidade

    Configureseusprincipaisinteresses

    DesenvolvimentoArquiteturaeDesignProcessosePrticasOperaeseInfraestruturaArquiteturaCorporativa

  • 04/05/2015 MocksnosoStubs

    http://www.infoq.com/br/articles/mocksArentStubs 25/25

    EstasopestmefeitosobreocontedovistonapginainicialdoInfoQBrasilenoseufeedRSS.CliqueemPrefernciasparateracessoaoutrasopesdepersonalizao.

    [email protected]

    [email protected]

    [email protected]

    [email protected]

    [email protected]

    InfoQBrasiletodooseucontedo:todososdireitosreservados.20062015C4MediaInc.Polticadeprivacidade

    BT