logo

Mock vs Stub vs Spy

A-și bate joc

Mock-urile sunt obiectele care stochează apelurile de metodă. Se face referire ca ambalajele dinamice pentru dependențe utilizate în teste. Este folosit pentru a înregistra și a verifica interacțiunea dintre clasele Java. O simulare este cunoscută drept cea mai puternică și flexibilă versiune a testului dublu. Folosim o metodă de batjocură se numește a-și bate joc() .

Funcția principală a utilizării mock-urilor este aceea că oferă control deplin asupra comportamentului obiectelor batjocorite. Obiectele simulate sunt în general folosite pentru verificarea comportamentului . Termenul comportament înseamnă verificarea metodelor și căilor corecte care sunt aplicate obiectelor.

Mock-urile sunt create în mare parte utilizând o bibliotecă sau un cadru batjocoritor precum Mockito, JMock și EasyMock. Este folosit pentru a testa o suită mare de teste în care stub-urile nu sunt suficiente. Una dintre funcțiile esențiale ale mock-ului este că putem verifica de câte ori este apelată o anumită metodă.

Următorul fragment de cod arată cum să utilizați mock().

 ToDoService doService = mock(ToDoService.class); 

Ciot

Stub-urile sunt obiectele care dețin date predefinite și le folosesc pentru a da răspunsuri în timpul testelor. Cu alte cuvinte, un stub este un obiect care seamănă cu un obiect real cu numărul minim de metode necesare pentru un test. Stub-urile sunt folosite atunci când nu dorim să folosim obiecte care ar da un răspuns cu date reale. Un stub este denumit cel mai ușor, iar versiunea cea mai statică a testului se dublează.

Principalele funcții ale stub-urilor sunt:

  • Returnează întotdeauna ieșirea predefinită, indiferent de intrare.
  • Poate fi folosit pentru a semăna cu obiectele bazei de date.
  • Stub-urile sunt folosite pentru a reduce complexitățile care apar în timpul creării obiectelor reale. Sunt folosite în principal pentru performanță verificarea de stat .

Spion

Spionii sunt cunoscuți ca obiecte parțial batjocoritoare . Înseamnă că spionul creează un obiect parțial sau o jumătate manechin din obiectul real prin împingerea sau spionarea pe cele reale. În spionaj, obiectul real rămâne neschimbat și doar spionăm câteva metode specifice ale acestuia. Cu alte cuvinte, luăm obiectul existent (real) și a inlocui sau spion doar câteva dintre metodele sale.

Spionii sunt folositori atunci când avem o clasă imensă plină de metode și vrem să batem joc de anumite metode. În acest scenariu, ar trebui să preferăm să folosim spioni în loc de batjocuri și cioturi. Apelează comportamentul real al metodei, dacă metodele nu sunt blocate.

În Mockito, metoda spy() este folosită pentru a crea obiecte spion. Ne permite să numim metodele normale ale obiectului real. Următorul fragment de cod arată cum să utilizați metoda spy().

 List spyArrayList = spy(ArrayList.class); 

Diferența dintre Stub și Mock

Parametrii Ciot A-și bate joc
Sursă de date Sursa de date a stub-urilor este codificată. De obicei, este strâns cuplat la suita de teste. Datele despre imitații sunt stabilite de teste.
Creat de Stub-urile sunt de obicei scrise de mână, iar unele sunt generate de instrumente. Mock-urile sunt de obicei create prin utilizarea bibliotecii terțe, cum ar fi Mockito, JMock și WireMock.
Utilizare Stub-urile sunt utilizate în principal pentru suite de testare simple. Mock-urile sunt folosite în principal pentru suitele mari de testare.
Interfață grafică pentru utilizator (GUI) Stub-urile nu au interfață grafică. Mock-urile au o interfață grafică.

Iată câteva diferențe între simulare și spion:

Parametrii A-și bate joc Spion
Utilizare Mock-urile sunt folosite pentru a crea obiecte complet simulate sau false. Este folosit în principal în suite de testare mari. Spionii sunt folosiți pentru a crea obiecte simulate parțiale sau pe jumătate. La fel ca simularea, spionii sunt folosiți și în suitele mari de testare.
Comportament implicit Când utilizați obiecte simulate, comportamentul implicit al metodelor (atunci când nu sunt blocate) este nu face nimic (nu efectuează nimic). Atunci când utilizați obiecte spion, comportamentul implicit al metodelor (când nu sunt blocate) este comportamentul real al metodei.

În tutorialele noastre anterioare, am discutat câteva exemple de înșelăciune, batjocură și spionaj. Pentru a înțelege mai bine diferența dintre ciocănire, batjocorire și spionare, parcurgeți exemplele.