Účelom unit testu je čo najskôr identifikovať chyby v aplikácii. Hoci vás k rovnakému cieľu môže viesť niekoľko kanálov, mali by ste sa snažiť použiť najefektívnejšiu cestu.

Testovacia sada JUnit môže mať niekoľko testovacích tried, ktoré potrebujú rovnaké údaje, ale nemôžete znova použiť testovacie údaje. V predchádzajúcich verziách JUnit bolo dobrým prístupom vytvoriť pomocnú metódu a potom túto metódu zavolať vždy, keď testovacia trieda potrebuje svoje údaje.

JUnit 5 poskytuje efektívnejší prístup k tomuto problému: dependency injection (DI).

Čo je injekcia závislosti?

DI je návrhový vzor, ​​v ktorom objekt dodáva závislosti iného objektu. Keď vytvárate aplikáciu Java, môžete mať triedu, ktorá závisí od objektu, ktorý iná trieda vytvorí na vykonávanie svojej funkcie.

Pred injekciou závislosti by ste na použitie objektu z inej triedy museli vytvoriť novú inštanciu tohto objektu v triede, ktorá na ňom závisí. Ak by ste teda mali niekoľko tried, ktoré závisia od toho istého objektu, museli by ste vytvoriť niekoľko jeho inštancií v rámci závislých tried.

instagram viewer

DI vám umožňuje použiť objekt v závislej triede bez toho, aby ste v tejto triede vytvorili jeho novú inštanciu.

Injekcia závislosti v JUnit 5

JUnit 5 vám umožňuje vložiť závislosti do testovacích metód a konštruktérov. To je dôležité, pretože predchádzajúce verzie rámca neumožňovali testovacie metódy alebo konštruktory mať parametre.

JUnit 5 vám umožňuje vložiť toľko parametrov, koľko chcete. Jediným háčikom je, že ParameterResolver API musí byť schopné vyriešiť každý parameter v čase spustenia. JUnit má v súčasnosti tri vstavané prekladače parametrov, ktoré automaticky používa. Ak chcete použiť akýkoľvek iný resolver, musíte ho explicitne zaregistrovať pomocou anotácie @ExtendWith.

Injekčné závislosti v JUnit

Tento vzorový program používa jeden zo vstavaných parametrov JUnit (TestInfoParameterResolver), aby ukázal, ako môžete vložiť závislosť do Test 5. júna. TestInfoParameterResolver rieši objekty, ktoré patria do rozhrania TestInfo. JUnit 5 teda poskytne inštanciu rozhrania TestInfo akejkoľvek metóde alebo konštruktorovi, ktorý ho používa.

importovaťstatické org.junit.jupiter.api. Tvrdenia.*;
importovať org.junit.jupiter.api. Zobraziť meno;
importovať org.junit.jupiter.api. Test;
importovať org.junit.jupiter.api. TestInfo;

triedaInfoTestInterfaceTest{
// Vloženie objektu testInfo do konštruktora InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
claimEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}

// Vloženie objektu testInfo do metód
@Test
neplatnétestMethodName(TestInfo testInfo){
claimEquals("názov testovacej metódy (TestInfo)", testInfo.getDisplayName());
}

@Test
@Zobraziť meno("metóda využívajúca @Zobraziť meno anotácia")
neplatnétestMethodNameTwo(TestInfo testInfo){
claimEquals("metóda využívajúca @Zobraziť meno anotácia", testInfo.getDisplayName());
}
}

Vyššie uvedený test JUnit ukazuje, ako vložiť objekt do konštruktora a dve metódy. The JUnit TestInfo má štyri metódy, ktoré môžete použiť s jeho objektom.

Metóda getDisplayName() je najužitočnejšia. Vráti zobrazovaný názov aktuálnej testovacej metódy alebo konštruktora. Štandardne je tento názov založený na triede. Ale ak použijete anotáciu @DisplayName, metóda getDisplayName() namiesto toho vráti tento text.

Vyššie uvedená trieda testu generuje nasledujúcu správu o teste:

Použite DI v metódach @Pred a @Po

Existujú štyri ďalšie typy anotovaných metód JUnit, ktoré podporujú závislosti. Sú to anotácie @BeforeAll, @BeforeEach, @AfterAll a @AfterEach. Rovnako ako metóda @Test, všetko, čo musíte urobiť, je odovzdať objekt ktorejkoľvek z metód pred alebo po ako parameter a môžete začať.

Anotácie @Before a @After sú dôležité, pretože vám tiež pomôžu vyvinúť efektívnejší testovací kód. Schopnosť vložiť do týchto metód aj závislosti, ďalej zlepší váš testovací kód.