Amikor egységtesztet ír, előfordulhat, hogy néhány, a teszttel nem kapcsolatos tevékenységet el kell végeznie. Ezek a tevékenységek bármilyen formát ölthetnek. Előfordulhat, hogy a teszt végrehajtása előtt csatlakoznia kell egy adatbázishoz vagy erőforrásokat kell összegyűjtenie. Minden teszteset végrehajtása után előfordulhat, hogy fel kell szabadítania néhány erőforrást.
E nem teszthez kapcsolódó tevékenységek bármelyikének elvégzése az egységteszt-osztályon kívül fárasztó, ha nem lehetetlen. A tesztosztály sikeres végrehajtása ezektől a tevékenységektől függhet, ezért a JUnit két pár megjegyzést biztosít a probléma megoldására.
A @Minden előtt annotáció
Egy JUnit tesztosztálynak egy vagy több vizsgálati módszere lehet. A @BeforeAll annotáció azt jelzi, hogy egy adott metódusnak le kell futnia egy tesztosztály összes tesztmetódusa előtt. Az ehhez a megjegyzéshez társított metódus csak egyszer fut le (a teszt elején), függetlenül a tesztosztályban lévő tesztmódszerek számától.
Minden olyan módszernek, amely a @BeforeAll megjegyzést használja, be kell tartania néhány előírást. Ezeknek a metódusoknak érvénytelen visszatérési típussal kell rendelkezniük, nyilvánosaknak kell lenniük, és nem lehetnek privátak. A @BeforeAll annotáció ideális az a
kapcsolat egy adatbázissal vagy új fájl létrehozása. Ez a cikk egy számológép tesztosztályt használ annak bemutatására, hogyan használhatja a @BeforeAll megjegyzést.A Számológép osztály
csomag com.app;
nyilvánososztálySzámológép{
nyilvánosstatikusintadd hozzá(int szám1, int szám2){
Visszatérés szám1 + szám2;
}
nyilvánosstatikusintkivonni(int szám1, int szám2){
Visszatérés szám1 - szám2;
}
nyilvánosstatikusintszaporodnak(int szám1, int szám2){
Visszatérés szám1 * szám2;
}
nyilvánosstatikusintfeloszt(int szám1, int szám2){
Visszatérés szám1 / szám2;
}
}
A CalculatorTest osztály
importstatikusorg.junit.Jupiter.api.Állítások.*;
importorg.junit.Jupiter.api.Minden előtt;
importorg.junit.Jupiter.api.Teszt;
importorg.junit.Jupiter.api.Megjelenítendő név;@DisplayName("Tesztosztály, amely bemutatja, hogyan kell használat az előttésután megjegyzések.")
osztályCalculatorTest{
@Minden előtt
nyilvánosstatikusürespowerOnCalculator(){
System.out.println("A számológép be van kapcsolva");
}@Teszt
@Megjelenítendő név("Tesztelési módszer, amely két egész értéket ad hozzá.")
nyilvánosürestesztHozzáadás(){
asserEquals(7, Számológép.add hozzá(3, 4));
}@Teszt
@Megjelenítendő név("Tesztelési módszer, amely egy egész értéket kivon a másikból.")
nyilvánosürestesztKivonás(){
asserEquals(6, Számológép.kivonjuk(9, 3));
}@Teszt
@Megjelenítendő név("Tesztelési módszer, amely két egész értéket megszoroz")
nyilvánosürestesztSzorzás(){
asserEquals(10, Számológép.szaporodni(5, 2));
}
@Teszt
@Megjelenítendő név("Tesztelési módszer, amely egy egész értéket eloszt egy másikkal")
nyilvánosürestestDivide(){
asserEquals(2, Számológép.feloszt(4, 2));
}
}
Ebben az osztályban a @BeforeAll annotáció a powerOnCalculator() metódussal működik, amely minden tesztfutás előtt kiírja, hogy „A számológép be van kapcsolva”. A sikeres tesztvégrehajtás a következő tesztjelentést nyomtatja ki:
Amint láthatja, a @BeforeAll megjegyzéshez társított módszer nem jelenik meg a tesztjelentésben. Ha azonban hiba van a @BeforeAll megjegyzésmódszerben, a tesztjelentés eredményei ezt hibával jelzik.
A @BeforeEach megjegyzés
A @BeforeAll megjegyzésekkel ellátott metódushoz hasonlóan a @BeforeEach annotált metódus sem jelenik meg a tesztjelentésben. A @BeforeEach annotált metódus a tesztosztály minden tesztmetódusa előtt fut le. Tehát, ha egy tesztosztály két vizsgálati módszert tartalmaz, akkor a @BeforeEach annotáció kétszer fut le.
importstatikusorg.junit.Jupiter.api.Állítások.*;
importorg.junit.Jupiter.api.Minden előtt;
importorg.junit.Jupiter.api.Mindenki előtt;
importorg.junit.Jupiter.api.Teszt;
@DisplayName("Tesztosztály, amely bemutatja, hogyan kell használat az előttésután megjegyzések.")
osztályCalculatorTest{
@Minden előtt
nyilvánosstatikusürespowerOnCalculator(){
System.out.println("A számológép be van kapcsolva");
}
@BeforeEach
nyilvánosüresclearCalculator(){
System.out.println("A számológép készen áll");
}
@Teszt
@Megjelenítendő név("Tesztelési módszer, amely két egész értéket ad hozzá.")
nyilvánosürestesztHozzáadás(){
asserEquals(7, Számológép.add hozzá(3, 4));
}
@Teszt
@Megjelenítendő név("Tesztelési módszer, amely egy egész értéket kivon a másikból.")
nyilvánosürestesztKivonás(){
asserEquals(6, Számológép.kivonjuk(9, 3));
}
@Teszt
@Megjelenítendő név("Tesztelési módszer, amely két egész értéket megszoroz")
nyilvánosürestesztSzorzás(){
asserEquals(10, Számológép.szaporodni(5, 2));
}
@Teszt
@Megjelenítendő név("Tesztelési módszer, amely egy egész értéket eloszt egy másikkal")
nyilvánosürestestDivide(){
asserEquals(2, Számológép.feloszt(4, 2));
}
}
A @BeforeEach megjegyzés hozzáadása a CalculatorTest osztályhoz a következő kimenetet eredményezi:
A @BeforeEach annotációhoz társított metódus négyszer fut le, minden tesztmódszer előtt egyszer. Megjegyzendő, hogy a @BeforeEach metódus nem statikus, érvénytelen visszatérési típussal rendelkezik, és nem privát, mivel ezek kötelező kikötések. Azt is fontos megjegyezni, hogy a @BeforeEach annotációhoz társított metódus a @BeforeAll metódus után fut.
Az @AfterAll megjegyzés
Az @AfterAll megjegyzéssel rendelkező metódus akkor fut le, ha a tesztosztályban lévő összes tesztmetódus befejezte a végrehajtást. Az @AfterAll kommentár ideális alapvető fájlműveletek, mint például egy fájl bezárása vagy az adatbázisról való leválasztás. Az @AfterAll annotáció a @BeforeAll annotáció megfelelője. A @BeforeAll kommentárhoz hasonlóan az @AfterAll annotációnak is statikusnak kell lennie, érvénytelennek kell lennie, és nagy része nem lehet privát.
@Végül
nyilvánosstatikusürespowerOffCalculator(){
System.out.println("A számológép ki van kapcsolva");
}
Az @AfterAll megjegyzésekkel ellátott metódus hozzáadása a meglévő CalculatorTest osztályhoz a következő kimenetet nyomtatja ki a konzolra:
Ne feledje, hogy a powerOffCalculator() metódus, amely az @AfterAll megjegyzést használja, a tesztosztály végén nyomtat, miután az összes tesztmódszer lefutott.
Az @AfterEach megjegyzés
Az @AfterEach annotáció a @BeforeEach annotáció megfelelője. Ugyanazok a kötelező kikötések, amelyek kissé eltérnek a @Minden előtt és @AfterAll megjegyzéseitől. Az különbözteti meg az @AfterEach annotációt a @BeforeEach annotációtól (a nevükön kívül), hogy az @AfterEach metódus minden tesztmódszer után lefut.
@AfterEach
nyilvánosüresreturnResults(){
System.out.println("Az eredmények készen állnak");
}
A CalculatorTest osztály végrehajtása a következő kimenetet nyomtatja ki a konzolra:
A kimenet azt mutatja, hogy az @AfterEach annotációhoz társított metódus (returnResults) négyszer nyomtat. A returnResults() metódus minden egyes végrehajtása csak az egyes egységtesztek végrehajtása után történik. Ez nyilvánvaló abból a tényből, hogy a returnResults() metódus kimenete megjelenik a @BeforeEach annotációhoz társított metódus minden kimenete után.
Fényesítse tesztcsomagjait megjegyzésekkel
A JUnit lehetővé teszi a nem teszteléssel kapcsolatos folyamatok kezelését az előtte és utána pár megjegyzések használatával. Ez a négy annotáció számos egyéb megjegyzés listájához tartozik, amelyek értéket adnak a tesztekhez. A JUnit másik megjegyzése a @DisplayName.
A teljes CalculatorTest osztályt megjelenítő két kódpélda a @DisplayName megjegyzést használja. A @DisplayName megjegyzés segít értelmesebb nevek létrehozásában a tesztosztályok és a vizsgálati módszerek számára.