mocks não são stubs

25
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

Upload: gleyson-sampaio

Post on 25-Sep-2015

12 views

Category:

Documents


0 download

DESCRIPTION

Mocks Não São Stubs

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