Download - Mocks Não São Stubs
-
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.
InfoQBrasiletodooseucontedo:todososdireitosreservados.20062015C4MediaInc.Polticadeprivacidade
BT