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.

pa? 19, 2021 357

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

EasyMock Maven dependencies 1.JPG


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

Listing 2 Klasa konta

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):

Listing 3 Interfejs AccountManager

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.

Listing 4 Klasa AccountService

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

Listing 5 Klasa TestAccountService

TestAccountService class 5.JPG


Wszystko, co robimy, to:

  1. Rozpoczynamy listę definiującą import z biblioteki EasyMock, której potrzebujemy (1). Widzimy, że w dużym stopniu polegamy na imporcie statycznym.
  2. 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.
  3. W (3) wywołujemy metodę createMock, aby utworzyć makietę żądanej klasy.
  4. W (4) tworzymy dwa obiekty kont, których użyjemy w naszych testach. Następnie zaczynamy deklarować nasze oczekiwania.
  5. 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 ).
  6. Gdy skończymy definiować oczekiwania, musimy wywołać metodę replay, aby zrobić announce (7).
  7. W (8) wywołujemy metodę przelewu, aby przelać pieniądze między dwoma rachunkami, aw (9) potwierdzamy oczekiwany wynik.
  8. 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

Udostępnij


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