Testowanie aplikacji za pomocą JUnit5 i Mockito. Część 1

Napisano już wiele dobrych projektów, które pomogą nam ułatwić korzystanie z pozorowanych obiektów w naszych projektach Java. W tej serii artykułów przyjrzymy się bliżej trzem najpopularniejszym modelom frameworków: EasyMock, JMock i Mockito. Serię kończymy Mockito.

list 23, 2021 291

Korzystanie z Mockito

Wiemy, jak pracować z EasyMock i JMock. Przedstawmy platformę Mockito (https://site.mockito.org/), kolejną popularną platformę mockowania.

Aby pracować z Mockito, musisz dodać do pliku pom.xml zależność z listingu 1:

Mockito Maven dependency 1.jpg


Listing 2 przedstawia bardzo prosty obiekt Konto z dwiema właściwościami: account ID i saldem.

The Account class 2.jpg


Listing 3 przedstawia interfejs AccountManager, który zarządza cyklem życia i trwałością obiektów kont (ograniczone do wyszukiwania kont według identyfikatora i aktualizowania kont):

AccountManager interface 3.jpg


Listing 4 przedstawia metodę przelewu przeznaczoną do przesyłania pieniędzy między dwoma rachunkami. Używa wcześniej zdefiniowanego interfejsu AccountManager, aby znaleźć rachunki debetowe i kredytowe według identyfikatora i zaktualizować je.

AccountService class 4.jpg


Chcemy mieć możliwość testowania jednostkowego zachowania AccountService.transfer. W tym celu, dopóki implementacja interfejsu AccountManager nie będzie gotowa, będziemy korzystać z próbnej implementacji interfejsu AccountManager, ponieważ metoda przelewu korzysta z tego interfejsu i musimy to przetestować w izolacji.

Próbując wprowadzić Mockito, tworzymy test TestAccountService przy użyciu Mockito, jak na listingu 5.

TestAccountService class 5.jpg



W tym listingu wykonujemy następujące czynności:

  • Jak zwykle, zaczynamy od zaimportowania wszystkich potrzebnych nam obiektów (1). Ten przykład wykorzystujący strukturę Mockito nie polega na statycznych funkcjach importu.
  • Rozszerzamy ten test za pomocą MockitoExtension (2). @ExtendWith to powtarzalna adnotacja, która jest używana do rejestrowania rozszerzeń dla klasy testowej z adnotacjami lub metody testowej. W tym przykładzie Mockito zauważymy tylko, że to rozszerzenie jest potrzebne do tworzenia pozorowanych obiektów za pomocą adnotacji, tak jak robimy to w (3). To mówi Mockito, aby utworzył pozorowany obiekt typu AccountManager.
  • Podobnie jak w przypadku każdej z poprzednich aukcji, deklarujemy dwa konta, za pomocą których będziemy przesyłać pieniądze pomiędzy (4).
  • W (5) zaczynamy deklarować oczekiwania, używając metody when. Dodatkowo stosujemy metodę "lenient" w celu zmodyfikowania ścisłości obiektów mockujących. Bez tego dozwolona jest tylko jedna deklaracja oczekiwania dla tej samej metody findAccountForUser, ale potrzebujemy dwóch (jedna dla argumentu "1" i jedna dla argumentu "2").
  • W (6) rozpoczynamy transfer z jednego konta na drugie, a następnie potwierdzamy oczekiwane rezultaty (7).

Fragment kodu z listing 6 otwiera połączenie HTTP z podanym adresem URL i odczytuje zawartość pod tym adresem URL. Załóżmy, że ten kod jest jedną z metod większej aplikacji, którą chcesz przetestować jednostkowo.

WebClient class 6.jpg


W tym listingu:

  • Otwieramy połączenie HTTP (1).
  • Czytamy wszystkie otrzymane treści (2).
  • Jeśli wystąpi błąd, zwracamy null (3).

Chcemy przetestować metodę getContent WebClient. W tym celu musimy mockować wszystkie zależności od tej metody. W tym przykładzie mamy dwie zależności - jedna to ConnectionFactory, a druga to InputStream. Podążając za wzorcem z EasyMock i JMock, spróbujmy pokazać test WebClient, tym razem używając Mockito.

Interesujesz się JUnit? Sprawdź nasze szkolenia

Catalin Tudose
Java and Web Technologies Expert

Udostępnij


Masz jeszcze jakieś pytania?
Skontaktuj się z nami
Thank you.
Your request has been received.