Celem testów jednostkowych jest jak najszybsze zidentyfikowanie błędów w aplikacji. Chociaż kilka kanałów może prowadzić do tego samego celu, powinieneś dążyć do korzystania z najbardziej efektywnej trasy.

Zestaw testów JUnit może mieć kilka klas testowych, które wymagają tych samych danych, ale nie można ponownie użyć danych testowych. W poprzednich wersjach JUnit dobrym podejściem było utworzenie metody użytkowej, a następnie wywołanie tej metody za każdym razem, gdy klasa testowa potrzebowała swoich danych.

JUnit 5 zapewnia bardziej efektywne podejście do tego problemu: wstrzykiwanie zależności (DI).

Co to jest wstrzykiwanie zależności?

DI to wzorzec projektowy, w którym obiekt dostarcza zależności innego obiektu. Podczas tworzenia aplikacji Java możesz mieć klasę zależną od obiektu utworzonego przez inną klasę w celu wykonywania jej funkcji.

Przed wstrzyknięciem zależności, aby użyć obiektu z innej klasy, musiałbyś utworzyć nową instancję tego obiektu w klasie, która jest od niego zależna. Tak więc, gdybyś miał kilka klas zależnych od tego samego obiektu, musiałbyś utworzyć kilka jego instancji w ramach klas zależnych.

instagram viewer

DI pozwala na użycie obiektu w klasie zależnej, bez tworzenia jego nowej instancji w tej klasie.

Wstrzykiwanie zależności w JUnit 5

JUnit 5 umożliwia wstrzykiwanie zależności zarówno do metod testowych, jak i konstruktorów. Jest to istotne, ponieważ poprzednie wersje frameworka nie pozwalały metodom testowym ani konstruktorom na posiadanie parametrów.

JUnit 5 umożliwia wstrzykiwanie dowolnej liczby parametrów. Jedynym haczykiem jest to, że interfejs API ParameterResolver musi być w stanie rozwiązać każdy parametr w czasie wykonywania. JUnit ma obecnie trzy wbudowane programy tłumaczące parametry, których używa automatycznie. Aby użyć innego programu tłumaczącego, musisz go jawnie zarejestrować, używając adnotacji @ExtendWith.

Wstrzykiwanie zależności w JUnit

Ten przykładowy program używa jednego z wbudowanych parametrów JUnit (TestInfoParameterResolver), aby zademonstrować, jak można wstrzyknąć zależność do Test JUnit 5. TestInfoParameterResolver rozpoznaje obiekty należące do interfejsu TestInfo. Tak więc JUnit 5 dostarczy instancję interfejsu TestInfo do dowolnej metody lub konstruktora, który go używa.

importstatyczny org.junit.jupiter.api. twierdzenia.*;
import org.junit.jupiter.api. Wyświetlana nazwa;
import org.junit.jupiter.api. Test;
import org.junit.jupiter.api. Informacje testowe;

klasaInfoTestTest interfejsu{
// Wstrzyknięcie obiektu testInfo do konstruktora InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}

// Wstrzyknięcie obiektu testInfo do metod
@Test
próżniaNazwaMetodytestowej(informacje o teście informacje o teście){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}

@Test
@Wyświetlana nazwa(„metoda wykorzystująca @Wyświetlana nazwa adnotacja")
próżniatestNazwaMetodyDwa(informacje o teście informacje o teście){
assertEquals("metoda używająca @Wyświetlana nazwa adnotacja", testInfo.getDisplayName());
}
}

Powyższy test JUnit pokazuje, jak wstrzyknąć obiekt do konstruktora i dwóch metod. The Informacje o teście JUnit interface ma cztery metody, których możesz użyć z jego obiektem.

Metoda getDisplayName() jest najbardziej użyteczna. Zwraca nazwę wyświetlaną bieżącej metody testowej lub konstruktora. Domyślnie ta nazwa jest oparta na klasie. Ale jeśli używasz adnotację @DisplayName, metoda getDisplayName() zamiast tego zwróci ten tekst.

Powyższa klasa testowa generuje następujący raport z testu:

Użyj DI w metodach @Before i @After

Istnieją cztery inne typy metod JUnit z adnotacjami, które obsługują zależności. Są to adnotacje @BeforeAll, @BeforeEach, @AfterAll i @AfterEach. Podobnie jak w przypadku metody @Test, wszystko, co musisz zrobić, to przekazać obiekt dowolnej metodzie przed lub po jako parametr i gotowe.

Adnotacje @Before i @After są ważne, ponieważ pomagają również opracować wydajniejszy kod testowy. Możliwość wstrzykiwania zależności do tych metod jeszcze bardziej poprawi twój kod testowy.