A @Before és @After megjegyzések használata a JUnitben

A @Before és @After megjegyzések használata a JUnitben

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.





MAKEUSEOF A NAP VIDEÓJA

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

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

A CalculatorTest osztály

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(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:



hasznos kötegelt fájlok a Windows 10 rendszerhez
  BeforeAll annotation report

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.





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

A @BeforeEach megjegyzés hozzáadása a CalculatorTest osztályhoz a következő kimenetet eredményezi:

  BeforeEach annotáció kimenet

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.

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

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:

  AfterAll annotation output

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.

mennyibe kerül egy MacBook Pro akkumulátor cseréje
@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

A CalculatorTest osztály végrehajtása a következő kimenetet nyomtatja ki a konzolra:

  AfterEach annotáció kimenet

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.