Sytuacja kobiet w IT w 2024 roku
10.02.20203 min
Łukasz Tkaczyk
Asseco Poland S.A.

Łukasz TkaczykStarszy Specjalista Kontroli Jakości / Kierownik ZespołuAsseco Poland S.A.

Możliwości JUnit 5

Poznaj możliwości biblioteki JUnit 5 w testach jednostkowych i nie tylko.

Możliwości JUnit 5

JUnit5 to framework nowej generacji do testów jednostkowych, który oferuje wiele ciekawych funkcji, takich jak np. testy parametryzowane, wstrzykiwanie zależności, całkowite wsparcie dla Javy 8, czy w końcu nowe API, umożliwiające łatwiejsze niż kiedykolwiek rozszerzanie możliwości frameworka i dostosowanie go do potrzeb projektowych. Pokażę kilka ciekawych rozwiązań, które aktualnie są wykorzystywane w projektach testowych.

JUnit5 vs JUnit4

Najpierw przedstawię Wam porównanie nowej i starej biblioteki.

Unit 4 to monolit. Jeden plik JAR (ang. Java Archive), który zawiera całą bibliotekę między innymi:

  • klasy odpowiedzialne za wyszukiwanie testów,
  • klasy odpowiedzialna za uruchamianie testów,
  • klasy zawierające API do pisania testów (np. @Test czy implementacje asercji).


JUnit 5 to niezależne komponenty:

  • platforma do uruchamiania testów: JUnit Platform,
  • API używane do pisania testów: JUnit Jupiter,
  • API używane do uruchamia testów napisanych w starszych wersjach JUnit na platformie JUnit 5: JUnit Vintage.


W swojej codziennej pracy używa się JUnit Jupiter, czyli samego API, które pozwala na tworzenie testów. To właśnie JUnit Jupiter zawiera adnotacje, który są niezbędne w trakcie pisania testów. W trakcie uruchamiania testów pośrednio używa się też JUnit Platform, na przykład uruchamiając testy w IDE.

Co nowego ?

Adnotacje

Adnotacje Junit4 vs Junit5:

  • @BeforeClass–> @BeforeAll
  • @Before–> @BeforeEach
  • @After–> @AfterEach
  • @AfterClass–> @AfterAll


Podstawowe adnotacje używane w testach pochodzą z pakietu org.junit.jupiter.api i są to:

  • @BeforeAll- metoda oznaczona tą adnotacją będzie wykonana przed wszystkimi innymi metodami w klasie
  • @BeforeEach- metoda oznaczona tą adnotacją będzie wykonana przed każdym kolejnym testem
  • @Test- właściwa metoda testowa
  • @AfterEach- metoda oznaczona tą adnotacją będzie wykonana po każdym kolejnym teście
  • @AfterAll- metoda oznaczona tą adnotacją będzie wykonana po wszystkich innych metodach w klasie


Inne przydatne adnotacje:

  • @DisplayName- pozwala na dostosowanie wyświetlanej nazwy testu
  • @Disabled- wyłącza test
  • @RepeatedTest- wykonuje test konfigurowalną liczbę powtórzeń
  • @Tag- pozwala na tagowanie testów


Asercje

Do podstawowych asercji należą: assertEqualsassertArrayEqualsassertSameassertNotSameassertTrueassertFalse, assertNull, assertNotNull, assertLinesMatch, assertIterablesMatch.


Ciekawostką są asercje grupowe Assert all

Assertions.assertAll weryfikuje, czy żadna z grupy asercji nie kończy się wyjątkiem:

Testowanie wyjątków

W odróżnieniu od JUnit 4, JUnit 5 nie pozwala na określenie oczekiwanego wyjątku w elemencie adnotacji @Test. W nowym podejściu użyte są wyrażenia lambda. Kod, który ma rzucić wyjątek, powinien implementować interfejs funkcyjny Executable. W najprostszym przypadku jest to wyrażenie lambda.

Metoda assertThrows przyjmuje klasę wyjątku, który powinien być rzucony implementację interfejsu, która powinna ten wyjątek rzucić:

assertThrows zwraca instancję wyjątku, który został rzucony.

Wspracie dla Springa

Zdarzyło Ci się kiedykolwiek mieć do czynienia z sytuacją, w której musiałeś wdrożyć testy jednostkowe dla komponentów Spring z samym JUnitem? Ustrojstwo, prawda????  Aktualnie zaimplementowane jest kompletne wsparcie dla Springa.

Testy równoległe

JUnit 5 posiada również wsparcie do testów równoległych, co umożliwia nam znaczące skrócenie czasu wywoływania naszych testów. Aby włączyć wykonywanie równoległe, wystarczy ustawić parametr konfiguracyjny junit.jupiter.execution.parallel.enabled na true w  pliku junit-platform.properties.

Po włączeniu właściwości wykonywania testów równoległych, silnik JUnit Jupiter wykona testy równolegle zgodnie z dostarczoną konfiguracją z zadeklarowanymi mechanizmami synchronizacji.

Szczegóły dotyczące konfiguracji i synchronizacji  można znaleźć w oficjalnej dokumentacji JUnit 5.

Wsparcie dla raportów Allure

Raport Allure to świetne rozwiązanie do raportowania automatyzacji testów.

Adnotacje Allure takie jak @Epic, @Feature, @Story i @Description powodują, że czytanie naszego testu jest bardziej zrozumiałe. Możemy również wprowadzić dodatkowe pola jak @Step (krok naszego testu) lub dodać załączniki i screenshoty z naszego testu.

<p>Loading...</p>