Svrha jediničnog testa je identificirati pogreške u aplikaciji što je prije moguće. Iako vas nekoliko kanala može dovesti do istog cilja, trebali biste nastojati koristiti najučinkovitiji put.

JUnit testni paket može imati nekoliko testnih klasa koje trebaju iste podatke, ali ne možete ponovno koristiti testne podatke. U prethodnim verzijama JUnit-a, dobar pristup bio je stvoriti pomoćnu metodu, zatim pozvati tu metodu svaki put kada testna klasa treba svoje podatke.

JUnit 5 pruža učinkovitiji pristup ovom problemu: ubrizgavanje ovisnosti (DI).

Što je ubrizgavanje ovisnosti?

DI je uzorak dizajna gdje objekt osigurava ovisnosti drugog objekta. Kada gradite Java aplikaciju, možda imate klasu koja ovisi o objektu koji druga klasa stvara za obavljanje svoje funkcije.

Prije uvođenja ovisnosti, da biste koristili objekt iz druge klase, morali biste stvoriti novu instancu tog objekta unutar klase koja o njemu ovisi. Dakle, ako imate nekoliko klasa koje ovise o istom objektu, morali biste stvoriti nekoliko njegovih instanci unutar ovisnih klasa.

DI vam omogućuje korištenje objekta u ovisnoj klasi, bez stvaranja njegove nove instance u toj klasi.

Injekcija ovisnosti u JUnit 5

JUnit 5 vam omogućuje umetanje ovisnosti u metode testiranja i konstruktore. Ovo je značajno jer prethodne verzije okvira nisu dopuštale testnim metodama ili konstruktorima da imaju parametre.

JUnit 5 vam omogućuje da ubacite onoliko parametara koliko želite. Jedina začkoljica je u tome što ParameterResolver API mora moći razriješiti svaki parametar tijekom izvođenja. JUnit trenutno ima tri ugrađena rezolvera parametara koje koristi automatski. Da biste koristili bilo koji drugi razrješivač, morali biste ga eksplicitno registrirati pomoću oznake @ExtendWith.

Ubacivanje ovisnosti u JUnit

Ovaj ogledni program koristi jedan od JUnit-ovih ugrađenih parametara (TestInfoParameterResolver), da pokaže kako možete umetnuti ovisnost u JUnit 5 test. TestInfoParameterResolver rješava objekte koji pripadaju TestInfo sučelju. Dakle, JUnit 5 će dostaviti instancu TestInfo sučelja bilo kojoj metodi ili konstruktoru koji ga koristi.

uvozstatički org.junit.jupiter.api. Tvrdnje.*;
uvoz org.junit.jupiter.api. DisplayName;
uvoz org.junit.jupiter.api. Test;
uvoz org.junit.jupiter.api. TestInfo;

razredaInfoTestInterfaceTest{
// Ubacivanje testInfo objekta u InfoTestInterfaceTest konstruktor
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}

// Ubacivanje testInfo objekta u metode
@Test
poništitiTestMethodName(TestInfo testInfo){
assertEquals("testMetodaName (TestInfo)", testInfo.getDisplayName());
}

@Test
@Ime za prikaz("metoda koja koristi @Ime za prikaz napomena")
poništititestMetodaNameTwo(TestInfo testInfo){
assertEquals("metoda koja koristi @Ime za prikaz komentar", testInfo.getDisplayName());
}
}

Gornji JUnit test pokazuje kako ubaciti objekt u konstruktor i dvije metode. The JUnit TestInfo sučelje ima četiri metode koje možete koristiti s njegovim objektom.

Metoda getDisplayName() je najkorisnija. Vraća naziv za prikaz trenutne test metode ili konstruktora. Prema zadanim postavkama, ovo se ime temelji na klasi. Ali ako koristite napomenu @DisplayName, metoda getDisplayName() vratit će taj tekst umjesto toga.

Gornja testna klasa generira sljedeće testno izvješće:

Koristite DI u metodama @Before i @After

Postoje četiri druge vrste JUnit označenih metoda koje podržavaju ovisnosti. Ovo su oznake @BeforeAll, @BeforeEach, @AfterAll i @AfterEach. Poput metode @Test, sve što trebate učiniti je proslijediti objekt bilo kojoj od metoda prije ili poslije kao parametar, i spremni ste.

Bilješke @Before i @After važne su jer vam također pomažu da razvijete učinkovitiji testni kod. Mogućnost ubacivanja ovisnosti u ove metode dodatno će poboljšati vaš testni kod.