Testowanie aplikacji za pomocą JUnit5 i Mockito. Część 1
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.
23 list 2021
795
Other articles
Testowanie aplikacji za pomocą JUnit5 i JMock. Część 2
Jak przygotować się do certyfikacji IIBA. Wyzwania i hacki
Testowanie aplikacji za pomocą JUnit5 i Mockito. Część 2
Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 2
Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 1
Test Driven Development z użyciem JUnit 5. Część 6
Test Driven Development z użyciem JUnit 5. Część 5
Test Driven Development z użyciem JUnit 5. Część 4
Test Driven Development z uzyciem JUnit 5. Czesc 3
Test Driven Development z użyciem JUnit 5. Część 2
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:
Listing 2 przedstawia bardzo prosty obiekt Konto z dwiema właściwościami: account ID i saldem.
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):
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.
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.
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.
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