logo

Mock vs Stub vs Spy

Pasityčiojimas

Mocks yra objektai, kuriuose saugomi metodų iškvietimai. Jis vadinamas dinaminiais testuose naudojamų priklausomybių įvyniokliais. Jis naudojamas įrašyti ir patikrinti „Java“ klasių sąveiką. Maketas yra žinomas kaip galingiausia ir lanksčiausia bandomųjų dublių versija. Mes naudojame tyčiojantis metodas vadinamas pasityčioti () .

Pagrindinė pašaipų naudojimo funkcija yra ta, kad ji leidžia visiškai kontroliuoti objektų, iš kurių tyčiojamasi, elgesį. Apgaulingi objektai paprastai naudojami elgesio patikrinimas . Terminas elgesys reiškia objektams taikomų teisingų metodų ir kelių patikrinimą.

Mockai dažniausiai kuriami naudojant biblioteką arba juokingą sistemą, pvz., Mockito, JMock ir EasyMock. Jis naudojamas dideliam testų rinkiniui išbandyti, kai neužtenka stuburo. Viena iš esminių mock funkcijų yra tai, kad galime patikrinti, kiek kartų iškviečiamas tam tikras metodas.

skaičiai abėcėlėje

Šis kodo fragmentas parodo, kaip naudoti mock().

mygtukas centre css
 ToDoService doService = mock(ToDoService.class); 

Stub

Stubai yra objektai, kuriuose saugomi iš anksto nustatyti duomenys ir kurie naudojami atsakymams pateikti testų metu. Kitaip tariant, stuburas yra objektas, panašus į realų objektą su minimaliu bandymui reikalingų metodų skaičiumi. Stubai naudojami, kai nenorime naudoti objektų, kurie atsakytų realiais duomenimis. Stubas vadinamas lengviausiu, o statiškiausia bandymo versija – dviguba.

Pagrindinės stuburo funkcijos yra šios:

  • Jis visada grąžina iš anksto nustatytą išvestį, nepaisant įvesties.
  • Jis gali būti naudojamas priminti duomenų bazės objektus.
  • Stubai naudojami siekiant sumažinti sudėtingumą, atsirandantį kuriant tikrus objektus. Jie daugiausia naudojami vaidinimui valstybinis patikrinimas .

Šnipas

Šnipai yra žinomi kaip iš dalies tyčiojasi iš daiktų . Tai reiškia, kad šnipas sukuria dalinį tikrojo objekto objektą arba pusę manekeno, užmušdamas ar šnipinėdamas tikrus objektus. Šnipinėjant tikrasis objektas lieka nepakitęs, o mes tiesiog šnipinėjame tam tikrus specifinius jo metodus. Kitaip tariant, imame esamą (realų) objektą ir pakeisti arba šnipas tik kai kurie jo metodai.

rėmo tkinteris

Šnipai naudingi, kai turime didžiulę metodų klasę ir norime pasityčioti iš tam tikrų metodų. Pagal šį scenarijų turėtume teikti pirmenybę šnipų naudojimui, o ne tyčiojimams ir šnipams. Tai vadina tikrąjį metodo elgesį, jei metodai nėra sugadinti.

Mockito programoje spy() metodas naudojamas šnipinėjimo objektams kurti. Tai leidžia mums vadinti įprastus realaus objekto metodus. Šis kodo fragmentas parodo, kaip naudoti spy() metodą.

 List spyArrayList = spy(ArrayList.class); 

Skirtumas tarp Stub ir Mock

Parametrai Stub Pasityčiojimas
Duomenų šaltinis Stubų duomenų šaltinis yra užkoduotas. Paprastai jis yra glaudžiai sujungtas su bandymų rinkiniu. Duomenys apie pasityčiojimus nustatomi atliekant testus.
Sukurta Stubai paprastai rašomi ranka, o kai kurie generuojami naudojant įrankius. Maketai paprastai kuriami naudojant trečiųjų šalių biblioteką, pvz., Mockito, JMock ir WireMock.
Naudojimas Stubai dažniausiai naudojami paprastiems bandymų rinkiniams. Mockai dažniausiai naudojami dideliems bandymų rinkiniams.
Grafinė vartotojo sąsaja (GUI) Stubs neturi GUI. Mocks turi GUI.

Toliau pateikiami kai kurie modelio ir šnipo skirtumai:

Parametrai Pasityčiojimas Šnipas
Naudojimas Mocks yra naudojami siekiant sukurti visiškai netikrus arba netikrus objektus. Jis daugiausia naudojamas dideliuose bandymų rinkiniuose. Šnipai naudojami kuriant dalinius arba pusiau padirbtus objektus. Kaip ir pasityčiojimas, šnipai taip pat naudojami dideliuose bandymų rinkiniuose.
Numatytas elgesys Kai naudojate netikrus objektus, numatytasis metodų elgesys (kai nėra užblokuotas) yra nieko nedaryti (nieko neatlieka). Naudojant šnipinėjimo objektus, numatytasis metodų elgesys (kai jis nėra užblokuotas) yra tikrasis metodo elgesys.

Ankstesnėse mokymo programose aptarėme kai kuriuos įkyrėjimo, tyčiojimosi ir šnipinėjimo pavyzdžius. Kad geriau suprastumėte skirtumą tarp įkyrėjimo, tyčiojimosi ir šnipinėjimo, peržiūrėkite pavyzdžius.