logo

Mock kontra Stub kontra Szpieg

Kpina

Mocki to obiekty przechowujące wywołania metod. Nazywa się to dynamicznymi opakowaniami zależności używanymi w testach. Służy do rejestrowania i weryfikowania interakcji pomiędzy klasami Java. Próba jest znana jako najpotężniejsza i najbardziej elastyczna wersja testu podwójnego. Stosujemy metodę kpiny tzw kpina() .

Główną funkcją stosowania mocków jest to, że daje ona pełną kontrolę nad zachowaniem wyśmiewanych obiektów. Zwykle używa się obiektów próbnych weryfikacja zachowania . Termin zachowanie oznacza sprawdzenie poprawnych metod i ścieżek zastosowanych do obiektów.

Makiety są najczęściej tworzone przy użyciu biblioteki lub środowiska kpiącego, takiego jak Mockito, JMock i EasyMock. Służy do testowania dużego zestawu testów, w których kody pośredniczące nie są wystarczające. Jedną z podstawowych funkcji mock jest to, że możemy sprawdzić, ile razy dana metoda jest wywoływana.

Poniższy fragment kodu pokazuje, jak używać mock().

 ToDoService doService = mock(ToDoService.class); 

Końcówka

Stuby to obiekty przechowujące predefiniowane dane i wykorzystujące je do udzielania odpowiedzi podczas testów. Innymi słowy, kod pośredniczący to obiekt przypominający obiekt rzeczywisty z minimalną liczbą metod potrzebnych do przeprowadzenia testu. Stuby są używane, gdy nie chcemy używać obiektów, które dałyby odpowiedź z prawdziwymi danymi. Odcinek określany jest jako najlżejsza i najbardziej statyczna wersja testu dubletu.

Główne funkcje stubów to:

  • Zawsze zwraca wstępnie zdefiniowane wyjście, niezależnie od wejścia.
  • Można go używać do przypominania obiektów bazy danych.
  • Stuby służą do zmniejszenia złożoności występującej podczas tworzenia rzeczywistych obiektów. Używane są głównie do występów weryfikacja stanu .

Szpieg

Szpiedzy są tzw częściowo drwiące obiekty . Oznacza to, że szpieg tworzy częściowy obiekt lub pół atrapę prawdziwego obiektu, kopiując lub szpiegując prawdziwe. W szpiegowaniu prawdziwy obiekt pozostaje niezmieniony, a my po prostu szpiegujemy określone metody. Innymi słowy, bierzemy istniejący (rzeczywisty) obiekt i zastępować Lub szpieg tylko niektóre z jego metod.

Szpiedzy przydadzą się, gdy mamy ogromną klasę pełną metod, a chcemy z niektórych metod wyśmiewać. W tym scenariuszu powinniśmy preferować używanie szpiegów, a nie kpin i skrótów. Wywołuje rzeczywiste zachowanie metody, jeśli metody nie są zaślepione.

W Mockito do tworzenia obiektów szpiegowskich używana jest metoda spy(). Pozwala nam wywołać metody normalne obiektu rzeczywistego. Poniższy fragment kodu pokazuje, jak używać metody spy().

 List spyArrayList = spy(ArrayList.class); 

Różnica między Stubem a Mockiem

Parametry Końcówka Kpina
Źródło danych Źródło danych kodów pośredniczących jest zakodowane na stałe. Zwykle jest ściśle powiązany z zestawem testów. Dane dotyczące makiet są konfigurowane przez testy.
Stworzone przez Stuby są zwykle pisane odręcznie, a niektóre są generowane przez narzędzia. Makiety są zwykle tworzone przy użyciu bibliotek innych firm, takich jak Mockito, JMock i WireMock.
Stosowanie Stuby są używane głównie w prostych zestawach testów. Makiety są używane głównie w dużych zestawach testowych.
Graficzny interfejs użytkownika (GUI) Stuby nie mają GUI. Makiety mają GUI.

Poniżej przedstawiono pewne różnice między próbą a szpiegiem:

Parametry Kpina Szpieg
Stosowanie Makiety służą do tworzenia w pełni fałszywych lub atrap obiektów. Stosowany jest głównie w dużych zestawach testowych. Szpiedzy służą do tworzenia obiektów częściowych lub pół-makiet. Podobnie jak w przypadku prób, szpiedzy są również wykorzystywani w dużych zestawach testowych.
Domyślne zachowanie Podczas używania obiektów próbnych domyślne zachowanie metod (gdy nie są stubbingowane) to nic nie robić (nic nie wykonuje). Podczas korzystania z obiektów szpiegowskich domyślnym zachowaniem metod (kiedy nie są one stubbingiem) jest zachowanie metody rzeczywistej.

W naszych poprzednich tutorialach omówiliśmy kilka przykładów karania, kpin i szpiegowania. Aby lepiej zrozumieć różnicę między karaniem, kpiną i szpiegowaniem, przejrzyj przykłady.