Vra

Ek het sopas die Wikipedia-artikel gelees oor bespotlike voorwerpe, maar ek is nog steeds nie heeltemal duidelik oor hul doel nie.Dit blyk dat dit voorwerpe is wat deur 'n toetsraamwerk geskep word wanneer die werklike voorwerp te kompleks of onvoorspelbaar sou wees (jy weet 100% seker wat die waardes van die skynvoorwerp is omdat jy dit ten volle beheer).

Ek was egter onder die indruk dat alle toetsing gedoen word met voorwerpe van bekende waardes, so ek moet iets mis.Byvoorbeeld, in 'n kursusprojek is ons getaak met 'n kalendertoepassing.Ons toetssuite het bestaan ​​uit gebeurtenisobjekte waarvan ons presies geweet het wat hulle was, sodat ons die interaksies tussen veelvuldige gebeurtenisobjekte, verskeie substelsels en die gebruikerskoppelvlak kon toets.Ek raai dit is bespotlike voorwerpe, maar ek weet nie hoekom jy dit nie sou doen nie, want sonder die voorwerpe van bekende waardes kan jy nie 'n stelsel toets nie.

Was dit nuttig?

Oplossing

'n Spot-voorwerp is nie net 'n voorwerp met bekende waardes nie.Dit is 'n objek wat dieselfde koppelvlak as 'n komplekse voorwerp het wat jy nie in toets kan gebruik nie (soos 'n databasisverbinding en resultaatstelle), maar met 'n implementering wat jy in jou toets kan beheer.

Daar is spottende raamwerke wat jou toelaat om hierdie voorwerpe op die vlug te skep en in wese jou toelaat om iets te sê soos:Maak vir my 'n voorwerp met 'n metode foo wat 'n int neem en 'n bool gee.Wanneer ek 0 slaag, moet dit waar terugkeer.Dan kan jy die kode wat foo() gebruik, toets om seker te maak dat dit gepas reageer.

Martin Fowler het 'n wonderlike artikel oor bespotting:

Ander wenke

Dink aan die klassieke geval van kliënt- en bedienersagteware.Om die kliënt te toets, benodig jy die bediener;om die bediener te toets, het jy die kliënt nodig.Dit maak eenheidstoetsing byna onmoontlik - sonder om bespottings te gebruik.As jy die bediener bespot, kan jy die kliënt in isolasie toets en omgekeerd.

Die punt van die spot is egter nie om die gedrag van die dinge te dupliseer nie.Dit is meer om op te tree as 'n eenvoudige staatsmasjien waarvan die toestandsveranderinge deur die toetsraamwerk ontleed kan word.So 'n kliënt-spot kan toetsdata genereer, dit na die bediener stuur en dan die reaksie ontleed.Jy verwag 'n sekere reaksie op 'n spesifieke versoek, en dus kan jy toets of jy dit kry.

Ek stem saam met alles @Lou Franco sê en jy moet beslis die uitstekende Martin Fowler-artikel oor toetsdubbelspel lees waarna @Lou Franco jou wys.

Die hoofdoel van enige toetsdubbel (vals, stomp of bespotting) is om die voorwerp wat getoets word te isoleer sodat jou eenheidstoets net daardie voorwerp toets (nie sy afhanklikhede en die ander tipes waarmee dit saamwerk of daarmee in wisselwerking is nie).

’n Voorwerp wat die koppelvlak verskaf waarvan jou objek afhanklik is, kan in die plek van die werklike afhanklikheid gebruik word sodat verwagtinge gestel kan word dat sekere interaksies sal plaasvind.Dit kan nuttig wees, maar daar is 'n mate van kontroversie rondom staatsgebaseerde vs.interaksie-gebaseerde toetsing.Oorbenutting van skynverwagting sal tot bros toetse lei.

'n Verdere rede vir toetsverdubbeling is om afhanklikhede van databasisse of lêerstelsels of ander tipes te verwyder wat duur is om op te stel of tydrowende bewerkings uit te voer.Dit beteken dat jy die tyd wat nodig is om die voorwerp waarin jy belangstel, te toets, tot 'n minimum kan beperk.

Hier is 'n voorbeeld:as jy kode skryf wat 'n databasis vul, wil jy dalk kyk of 'n spesifieke metode data by die databasis gevoeg het.

Die opstel van 'n kopie van die databasis vir toetsing het die probleem dat as jy aanneem dat daar geen rekords is voor die oproep na die getoetste metode en een rekord daarna nie, dan moet jy die databasis terugrol na 'n vorige toestand, en sodoende by die bokoste voeg vir die uitvoer van die toets.

As jy aanneem daar is net een meer rekord as voorheen, kan dit bots met 'n tweede toetser (of selfs 'n tweede toets in dieselfde kode) wat aan dieselfde databasis koppel, en sodoende afhanklikhede veroorsaak en die toetse broos maak.

Die spot laat jou toe om die toetse onafhanklik van mekaar te hou en maklik om op te stel.

Dit is net een voorbeeld - ek is seker ander kan meer verskaf.

Ek stem 100% saam met die ander bydraers oor hierdie onderwerp, veral met die aanbeveling vir die Martin Fowler-artikel.

Jy sal dalk in ons boek belangstel, sien http://www.growing-object-oriented-software.com/.Dit is in Java, maar die idees geld steeds.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top