Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 2
Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 2
Druga część naszego artykułu o testowaniu aplikacji za pomocą JUnit5 i EasyMock. Tym razem przyjrzymy się najlepszym praktykom JUnit, tworzeniu obiektów EasyMock.
12 list 2021
693
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 Mockito. Część 1
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
Najlepsze praktyki JUnit: tworzenie obiektów EasyMock
Oto miła wskazówka na temat metody createMock. Jeśli sprawdzisz API EasyMocka, zobaczysz, że metoda createMock ma wiele podpisów. Podpis, którego używamy, to:
Którego powinniśmy użyć? createMock (nazwa ciągu, Class claz) jest lepsza. Jeśli używasz createMock (Class claz), a Twoje oczekiwania nie są spełnione, pojawia się komunikat o błędzie podobny do następującego:
Jak widzisz, ta wiadomość nie jest tak opisowa, jak byśmy chcieli. Jeśli zamiast tego użyjesz createMock (nazwa ciągu, Class claz) i odwzorujemy klasę na podaną nazwę, otrzymując coś takiego:
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.
Listing 6 Klasa WebClient
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. Wygląda na to, że wystąpił problem, ponieważ EasyMock może tylko mockować interfejsy, a InputStream jest klasą.
Aby móc mockować klasę InputStream, musimy użyć rozszerzeń klas EasyMock. Reprezentują one projekt rozszerzenia EasyMock, który umożliwia generowanie obiektów mock dla klas i interfejsów. Odpowiada im druga zależność Mavena z listy 1.
Listing 7 Testowanie WebClient z EasyMock
Na listing 7 wykonujemy następujące czynności:
- Zaczynamy od zaimportowania potrzebnych nam obiektów (1). Zauważ, że ponieważ używamy rozszerzeń klas EasyMock, musimy teraz zaimportować obiekt org.easymock.classextension.EasyMock zamiast org.easymock.EasyMock. Teraz jesteśmy gotowi do tworzenia pozorowanych obiektów klas i interfejsów przy użyciu statycznie importowanych metod rozszerzeń klas.
- W (2), podobnie jak we wcześniejszych listach, deklarujemy obiekty, które chcemy mockować, aw (3) wywołujemy metodę createMock w celu ich zainicjowania.
- W (4) definiujemy oczekiwanie strumienia, gdy wywoływana jest metoda read (zwróć uwagę, że aby zatrzymać czytanie ze strumienia, ostatnią rzeczą do zwrócenia jest -1). Pracując ze strumieniem niskiego poziomu, definiujemy, jak czytać jeden bajt na raz, ponieważ InputStream czyta bajt po bajcie. W (5) oczekujemy wywołania metody close w strumieniu.
- Teraz musimy zaznaczyć, że skończyliśmy, deklarując nasze oczekiwania - robimy to, wywołując metodę replay (6). Metoda replay służy do przekazywania mockowania z fazy, w której rejestrujemy metodę, którą oczekujemy, że zostanie wywołana, do miejsca, w którym testujemy. Wcześniej zarejestrowaliśmy zachowanie, ale obiekt nie działa jako próba. Po wywołaniu powtórki działa zgodnie z oczekiwaniami. Reszta to wywołanie testowanej metody (7) i zapewnienie oczekiwanego wyniku (8).
Dodajemy również kolejny test, aby zasymulować stan, w którym nie możemy zamknąć InputStream.
- Definiujemy oczekiwanie, w którym oczekujemy wywołania metody close strumienia (9).
- W następnym wierszu deklarujemy, że w przypadku wystąpienia tego wywołania należy zgłosić wyjątek IOException (10).
Wnioski
W tym artykule przedstawiono kroki potrzebne do przetestowania aplikacji Java za pomocą JUnit 5 i EasyMock. Pokazaliśmy, jak przetestować funkcjonalność AccountService, mockując AccountManager i WebClient przez mockowanie ConnectionFactory i InputStream.
Jak sugeruje nazwa frameworka, korzystanie z EasyMock jest łatwe i jest opcją dla wielu projektów, ale abyś był świadomy całego mockującego obrazu, musimy wprowadzić inny framework, mockujący części usługi konta i klienta internetowego używając trzech różnych frameworków do mockowania: EasyMock, JMock i Mockito. W ten sposób czujesz "smak" tego, jak działa mockowanie.
Interesujesz się JUnit? Sprawdź nasze szkolenia
Catalin Tudose
Java and Web Technologies Expert