Az egységteszt célja, hogy a lehető leghamarabb azonosítsa az alkalmazás hibáit. Bár több csatorna ugyanahhoz a célhoz vezethet, a leghatékonyabb útvonalat kell használnia.
A JUnit tesztcsomagnak több tesztosztálya is lehet, amelyekhez ugyanazokra az adatokra van szükség, de a tesztadatokat nem használhatja fel újra. A JUnit korábbi verzióiban jó módszer volt létrehozni egy segédprogram metódust, majd minden alkalommal meghívni ezt a metódust, amikor egy tesztosztálynak szüksége volt az adataira.
A JUnit 5 hatékonyabb megközelítést kínál erre a problémára: a függőségi injekció (DI).
Mi az a függőségi injekció?
A DI egy tervezési minta, ahol egy objektum egy másik objektum függőségeit biztosítja. Amikor Java-alkalmazást készít, előfordulhat, hogy van egy osztálya, amely egy olyan objektumtól függ, amelyet egy másik osztály hoz létre a funkciója végrehajtása érdekében.
A függőségi befecskendezés előtt egy másik osztályból származó objektum használatához létre kell hoznia az objektum új példányát a tőle függő osztályon belül. Tehát, ha több osztálya is függ ugyanattól az objektumtól, akkor annak több példányát kell létrehoznia a függő osztályokon belül.
A DI lehetővé teszi, hogy egy objektumot egy függő osztályban használjon anélkül, hogy új példányt hozna létre az osztályban.
Függőség-injekció a JUnit 5-ben
A JUnit 5 lehetővé teszi a függőségek beillesztését mind a tesztmódszerekbe, mind a konstruktorokba. Ez azért fontos, mert a keretrendszer korábbi verziói nem tették lehetővé, hogy a tesztelési módszerek vagy a konstruktorok rendelkezzenek paraméterekkel.
A JUnit 5 lehetővé teszi, hogy tetszőleges számú paramétert fecskendezzen be. Az egyetlen bökkenő az, hogy a ParameterResolver API-nak képesnek kell lennie az egyes paraméterek feloldására futás közben. A JUnit jelenleg három beépített paraméterfeloldóval rendelkezik, amelyeket automatikusan használ. Bármilyen más feloldó használatához kifejezetten regisztrálnia kell azt az @ExtendWith megjegyzés használatával.
Függőségek befecskendezése a JUnitben
Ez a példaprogram a JUnit egyik beépített paraméterét (a TestInfoParameterResolver) használja annak bemutatására, hogyan lehet függőséget beilleszteni egy JUnit 5 teszt. A TestInfoParameterResolver feloldja a TestInfo felülethez tartozó objektumokat. Tehát a JUnit 5 a TestInfo felület egy példányát minden olyan metódushoz vagy konstruktorhoz ellátja, amely azt használja.
importstatikus org.junit.jupiter.api. Állítások.*;
import org.junit.jupiter.api. Megjelenítendő név;
import org.junit.jupiter.api. Teszt;
import org.junit.jupiter.api. TestInfo;osztályInfoTestInterfaceTest{
// TestInfo objektum beszúrása az InfoTestInterfaceTest konstruktorba
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}// TestInfo objektum beszúrása metódusokba
@Teszt
üresteszt MethodName(TestInfo testInfo){
assertEquals("tesztMethodName (TestInfo)", testInfo.getDisplayName());
}
@Teszt
@Megjelenítendő név("módszer a @Megjelenítendő név megjegyzés")
üresteszt MethodNameTwo(TestInfo testInfo){
assertEquals("metódus a @Megjelenítendő név megjegyzés", testInfo.getDisplayName());
}
}
A fenti JUnit teszt bemutatja, hogyan lehet objektumot beilleszteni egy konstruktorba és két módszert. A JUnit TestInfo Az interfész négy metódussal rendelkezik, amelyeket az objektumával használhat.
A getDisplayName() metódus a leghasznosabb. Az aktuális tesztmódszer vagy konstruktor megjelenített nevét adja vissza. Alapértelmezés szerint ez a név az osztályon alapul. De ha használod a @DisplayName megjegyzés, a getDisplayName() metódus inkább ezt a szöveget adja vissza.
A fenti tesztosztály a következő vizsgálati jelentést állítja elő:
Használja a DI-t a @Before és @After metódusokban
Négy másik típusú JUnit megjegyzéssel ellátott metódus létezik, amelyek támogatják a függőségeket. Ezek a @BeforeAll, @BeforeEach, @AfterAll és @AfterEach megjegyzések. A @Test metódushoz hasonlóan mindössze annyit kell tennie, hogy paraméterként át kell adnia egy objektumot bármelyik előtte vagy utána metódusnak, és már mehet is.
A @Before és @After megjegyzések fontosak, mivel ezek is segítenek hatékonyabb tesztkód kidolgozásában. Ha ezekbe a módszerekbe függőséget is beszúrhat, az tovább javítja a tesztkódot.