logo

Mock vs Stub vs Spy

Mock

A mockok azok az objektumok, amelyek metódushívásokat tárolnak. A tesztekben használt függőségek dinamikus burkolóinak nevezik. A Java osztályok közötti interakció rögzítésére és ellenőrzésére szolgál. A modell a tesztpáros legerősebb és legrugalmasabb változataként ismert. A gúnyolódás módszerét használjuk ún gúny() .

A gúnyolatok használatának fő funkciója, hogy teljes ellenőrzést ad a gúnyolt objektumok viselkedése felett. Az álobjektumokat általában arra használják viselkedés ellenőrzése . A viselkedés kifejezés az objektumokra alkalmazott helyes metódusok és útvonalak ellenőrzését jelenti.

A mockok többnyire könyvtár vagy gúnyos keretrendszer, például Mockito, JMock és EasyMock használatával jönnek létre. Számos tesztcsomag tesztelésére szolgál, ahol a csonkok nem elegendőek. A mock egyik lényeges funkciója, hogy ellenőrizni tudjuk, hányszor hívják meg az adott metódust.

A következő kódrészlet bemutatja, hogyan kell használni a mock().

 ToDoService doService = mock(ToDoService.class); 

Stub

A csonkok azok az objektumok, amelyek előre meghatározott adatokat tartalmaznak, és a tesztek során válaszadásra használják őket. Más szavakkal, a csonk egy olyan objektum, amely a teszthez szükséges minimális számú módszerrel hasonlít egy valódi objektumra. A csonkokat akkor használjuk, ha nem akarunk olyan objektumokat használni, amelyek valós adatokkal adnának választ. A csonkot a legkönnyebbnek nevezik, a teszt legstatikusabb változata pedig kettős.

A csonkok fő funkciói a következők:

  • Mindig az előre meghatározott kimenetet adja vissza, függetlenül a bemenettől.
  • Használható arra, hogy hasonlítson az adatbázis-objektumokra.
  • A csonkokat a valódi objektumok létrehozása során fellépő bonyolultságok csökkentésére használják. Főleg előadásra használják állapotellenőrzés .

Kém

A kémeket úgy ismerik részben kigúnyolja a tárgyakat . Ez azt jelenti, hogy a kém a valódi objektum egy részleges tárgyát vagy egy fél bábuját hoz létre úgy, hogy elnyomja vagy kikémli az igazit. A kémkedés során a valódi tárgy változatlan marad, és csak bizonyos módszereket kémkedünk. Vagyis vesszük a létező (valódi) tárgyat és cserélje ki vagy kém csak néhány módszere.

A kémek akkor hasznosak, ha egy hatalmas osztályunk van tele módszerekkel, és ki akarunk gúnyolni bizonyos módszereket. Ebben a forgatókönyvben előnyben részesítjük a kémek használatát a gúnyok és csonkok helyett. A valódi metódus viselkedését hívja, ha a metódusok nincsenek csonkolva.

A Mockitoban a spy() metódust használják kémobjektumok létrehozására. Lehetővé teszi, hogy meghívjuk a valós objektum normál metódusait. A következő kódrészlet a spy() metódus használatát mutatja be.

 List spyArrayList = spy(ArrayList.class); 

Különbség Stub és Mock között

Paraméterek Stub Mock
Adatforrás A csonkok adatforrása keménykódolt. Általában szorosan kapcsolódik a tesztkészlethez. A gúnyok adatait a tesztek állítják fel.
Készítette A csonkokat általában kézzel írják, és néhányat eszközök generálnak. A mockok általában harmadik féltől származó könyvtárak, például Mockito, JMock és WireMock használatával jönnek létre.
Használat A csonkokat főként egyszerű tesztkészletekhez használják. A mockokat főleg nagy tesztkészletekhez használják.
Grafikus felhasználói felület (GUI) A csonkok nem rendelkeznek grafikus felhasználói felülettel. A gúnyok grafikus felhasználói felülettel rendelkeznek.

Íme néhány különbség a gúny és a kém között:

Paraméterek Mock Kém
Használat A gúnyok teljesen ál- vagy álobjektumok létrehozására szolgálnak. Főleg nagy tesztkészletekben használják. A kémeket részleges vagy félig álobjektumok létrehozására használják. Mint a gúny, a kémeket a nagy tesztkészletekben is használják.
Alapértelmezett viselkedés Mock objektumok használatakor a metódusok alapértelmezett viselkedése (ha nem csonkolva) a semmittevés (nem hajt végre semmit.) Kémobjektumok használatakor a metódusok alapértelmezett viselkedése (ha nem csonkolva) a valódi metódus viselkedése.

Korábbi oktatóanyagainkban megvitattunk néhány példát a csonkításra, gúnyolásra és kémkedésre. Ha jobban szeretné megérteni a különbséget a csonkítás, a gúnyolás és a kémkedés között, nézze meg a példákat.