Wybierz region
pl
  • PL
  • EN
Wydrukuj

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

JUnit5 to framework nowej generacji do testów jednostkowych 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żą: assertEquals, assertArrayEquals, assertSame, assertNotSame, assertTrue, assertFalse, 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

Jeśli kiedykolwiek miałeś do czynienia z sytuacją, w której musiałeś wdrożyć testy jednostkowe dla komponentów Spring z samym JUnitem? Ustrojstwo prawda ????  aktualnie kompletne wsparcie dla springa jest zaimplementowane

https://github.com/sbrannen/spring-test-junit5

 

Testy równoległe

JUnit 5 posada 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.


Łukasz Tkaczyk

Tester od 10 lat. Automatyzujący od 7. Szukający miejsc, gdzie automatyzacja może pomóc.


Wydrukuj