Testowanie aplikacji za pomocą JUnit5 i EasyMock. 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 najczęściej używanym modelom szkieletowym: EasyMock, JMock i Mockito. Zaczniemy serię od EasyMock.
1. Korzystanie z EasyMock
Easymock to framework o otwartym kodzie źródłowym, który zapewnia przydatne klasy do mockowania obiektów.
Aby z tym pracować, musimy dodać do pliku pom.xml zależności z listingu 1:
Listing 1 Zależności EasyMock Maven

Listing 2 przedstawia bardzo prosty Account object z dwiema właściwościami: account ID i saldem.
Listing 2 Klasa konta

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 3 Interfejs AccountManager

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.
Listing 4 Klasa AccountService

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ć EasyMock, tworzymy test TestAccountService przy użyciu EasyMock, jak na listingu 5.
Listing 5 Klasa TestAccountService

Wszystko, co robimy, to:
- Rozpoczynamy listę definiującą import z biblioteki EasyMock, której potrzebujemy (1). Widzimy, że w dużym stopniu polegamy na imporcie statycznym.
- W (2) deklarujemy obiekt, z którego chcielibyśmy mockować. Zauważ, że nasz AccountManager jest interfejsem; Przyczyna tego jest prosta — podstawowa struktura EasyMock może jedynie mockować obiekty interfejsu.
- W (3) wywołujemy metodę createMock, aby utworzyć makietę żądanej klasy.
- W (4) tworzymy dwa obiekty kont, których użyjemy w naszych testach. Następnie zaczynamy deklarować nasze oczekiwania.
- Dzięki EasyMock deklarujemy oczekiwania na dwa sposoby. Kiedy zwracany typ metody jest unieważniony, wywołujemy go na makiecie obiektu (jak w (5)), lub gdy metoda zwraca dowolny rodzaj obiektu, wtedy musimy użyć metod Expect-andReturn z EasyMock API (6 ).
- Gdy skończymy definiować oczekiwania, musimy wywołać metodę replay, aby zrobić announce (7).
- W (8) wywołujemy metodę przelewu, aby przelać pieniądze między dwoma rachunkami, aw (9) potwierdzamy oczekiwany wynik.
- Metoda @AfterEach, która jest wykonywana po każdej metodzie @Test, zawiera weryfikację oczekiwań. Za pomocą EasyMock możemy wywołać metodę verify z dowolnym obiektem pozorowanym (10), aby sprawdzić, czy zadeklarowane przez nas oczekiwania wywołania metody są wyzwalane. Uwzględnienie weryfikacji w metodzie @AfterEach umożliwia nam łatwe wprowadzanie nowych testów, a stąd będziemy polegać na wykonaniu metody weryfikacji.
Interesujesz się JUnit? Sprawdź nasze szkolenia
Catalin Tudose
Java and Web Technologies Expert
Originally published at https://www.luxoft-training.pl.