Namen testa enote je čim prej prepoznati napake v aplikaciji. Čeprav vas lahko do istega cilja vodi več kanalov, si morate prizadevati za uporabo najučinkovitejše poti.

Testna zbirka JUnit ima lahko več testnih razredov, ki potrebujejo iste podatke, vendar testnih podatkov ne morete ponovno uporabiti. V prejšnjih različicah JUnit je bil dober pristop ustvariti pomožno metodo in jo nato poklicati vsakič, ko je testni razred potreboval svoje podatke.

JUnit 5 ponuja učinkovitejši pristop k tej težavi: vstavljanje odvisnosti (DI).

Kaj je vbrizgavanje odvisnosti?

DI je načrtovalni vzorec, kjer objekt zagotavlja odvisnosti drugega predmeta. Ko gradite aplikacijo Java, imate morda razred, ki je odvisen od predmeta, ki ga ustvari drug razred za izvajanje svoje funkcije.

Pred vbrizgavanjem odvisnosti bi morali za uporabo predmeta iz drugega razreda ustvariti nov primerek tega predmeta znotraj razreda, ki je odvisen od njega. Torej, če bi imeli več razredov, ki so odvisni od istega predmeta, bi morali ustvariti več njegovih primerkov znotraj odvisnih razredov.

instagram viewer

DI vam omogoča uporabo predmeta v odvisnem razredu, ne da bi v tem razredu ustvarili nov primerek.

Vstavljanje odvisnosti v JUnit 5

JUnit 5 vam omogoča vstavljanje odvisnosti tako v testne metode kot v konstruktorje. To je pomembno, saj prejšnje različice ogrodja testnim metodam ali konstruktorjem niso dovoljevale parametrov.

JUnit 5 vam omogoča vstavljanje poljubnega števila parametrov. Edina težava je v tem, da mora biti API ParameterResolver sposoben razrešiti vsak parameter med izvajanjem. JUnit ima trenutno tri vgrajene razreševalnike parametrov, ki jih uporablja samodejno. Če želite uporabiti kateri koli drug razreševalec, ga morate izrecno registrirati z uporabo oznake @ExtendWith.

Vstavljanje odvisnosti v JUnit

Ta vzorčni program uporablja enega od vgrajenih parametrov JUnit (TestInfoParameterResolver), da prikaže, kako lahko vstavite odvisnost v Test JUnit 5. TestInfoParameterResolver razreši objekte, ki pripadajo vmesniku TestInfo. Torej bo JUnit 5 zagotovil primerek vmesnika TestInfo kateri koli metodi ali konstruktorju, ki ga uporablja.

uvozstatična org.junit.jupiter.api. Trditve.*;
uvoz org.junit.jupiter.api. DisplayName;
uvoz org.junit.jupiter.api. Test;
uvoz org.junit.jupiter.api. TestInfo;

razredInfoTestInterfaceTest{
// Vbrizgavanje objekta testInfo v konstruktor InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}

// Vbrizgavanje objekta testInfo v metode
@Test
prazninatestMethodName(TestInfo testInfo){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}

@Test
@DisplayName("metoda z uporabo @DisplayName opomba")
prazninatestMethodNameTwo(TestInfo testInfo){
assertEquals("metoda, ki uporablja @DisplayName opomba", testInfo.getDisplayName());
}
}

Zgornji test JUnit prikazuje, kako vbrizgati predmet v konstruktor in dve metodi. The JUnit TestInfo vmesnik ima štiri metode, ki jih lahko uporabite z njegovim predmetom.

Najbolj uporabna je metoda getDisplayName(). Vrne prikazno ime trenutne testne metode ali konstruktorja. Privzeto to ime temelji na razredu. Če pa uporabljate pripis @DisplayName, bo metoda getDisplayName() namesto tega vrnila to besedilo.

Zgornji testni razred ustvari naslednje preskusno poročilo:

Uporabite DI v metodah @Before in @After

Obstajajo še štiri druge vrste označenih metod JUnit, ki podpirajo odvisnosti. To so opombe @BeforeAll, @BeforeEach, @AfterAll in @AfterEach. Tako kot pri metodi @Test je vse, kar morate storiti, posredovati predmet kateri koli od metod pred ali po kot parameter in pripravljeni ste.

Opombi @Before in @After sta pomembni, saj vam prav tako pomagata razviti učinkovitejšo testno kodo. Zmožnost vstavljanja odvisnosti v te metode bo dodatno izboljšala vašo preskusno kodo.