Ako používať anotácie @Pred a @Po v JUnit

Ako používať anotácie @Pred a @Po v JUnit

Keď píšete sadu testov jednotiek, môžu existovať niektoré činnosti nesúvisiace s testom, ktoré budete musieť vykonať. Tieto aktivity môžu mať akúkoľvek formu. Pred vykonaním testu sa možno budete musieť pripojiť k databáze alebo zhromaždiť prostriedky. Po vykonaní každého testovacieho prípadu možno budete musieť uvoľniť nejaké prostriedky.





VYUŽITIE VIDEA DŇA

Vykonávanie ktorejkoľvek z týchto činností nesúvisiacich s testom mimo rozsahu triedy jednotkového testu môže byť únavné, ak nie nemožné. Úspešné vykonanie vašej testovacej triedy môže závisieť od týchto aktivít, takže JUnit poskytuje dva páry anotácií na riešenie tohto problému.





Anotácia @BeforeAll

Testovacia trieda JUnit môže mať jednu alebo viac testovacích metód. Anotácia @BeforeAll signalizuje, že konkrétna metóda by sa mala vykonať pred všetkými testovacími metódami v testovacej triede. Metóda spojená s touto anotáciou sa vykoná iba raz (na začiatku testu) bez ohľadu na počet testovacích metód v testovacej triede.





Každá metóda, ktorá používa anotáciu @BeforeAll, musí spĺňať niekoľko podmienok. Tieto metódy musia mať typ návratu void, musia byť verejné a nesmú byť súkromné. Anotácia @BeforeAll je ideálna na vytvorenie a pripojenie k databáze alebo vytvorenie nového súboru. Tento článok používa testovaciu triedu kalkulačky, ktorá ukazuje, ako môžete použiť anotáciu @BeforeAll.

Trieda kalkulačky

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;
}
}

Testovacia trieda kalkulačky

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));
}
}

V tejto triede anotácia @BeforeAll pracuje s metódou powerOnCalculator(), ktorá pred akýmkoľvek testom vypíše „Kalkulačka je zapnutá“. Úspešné vykonanie testu vytlačí nasledujúcu správu o teste:



  Prehľad anotácií BeforeAll

Ako vidíte, metóda spojená s anotáciou @BeforeAll sa v testovacej správe nezobrazuje. Ak sa však v metóde anotácie @BeforeAll vyskytne chyba, výsledky správy o teste to budú indikovať ako zlyhanie.

Anotácia @Beforeach

Podobne ako anotovaná metóda @BeforeAll, ani anotovaná metóda @BeforeEach sa v testovacej správe nezobrazí. Anotovaná metóda @BeforeEach sa vykoná pred každou testovacou metódou v testovacej triede. Ak teda testovacia trieda obsahuje dve testovacie metódy, anotácia @BeforeEach sa vykoná dvakrát.





ako získať viac úložiska na mac
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));
}
}

Pridaním anotácie @BeforeEach do triedy CalculatorTest sa získa nasledujúci výstup:

  Pred každým výstupom anotácie

Metóda spojená s anotáciou @BeforeEach sa vykoná štyrikrát, raz pred každou testovacou metódou. Mali by ste si uvedomiť, že metóda @BeforeEach nie je statická, má typ návratu void a nie je súkromná, keďže ide o povinné ustanovenia. Je tiež dôležité poznamenať, že metóda spojená s anotáciou @BeforeEach sa spúšťa po metóde @BeforeAll.





Anotácia @AfterAll

Metóda s anotáciou @AfterAll sa spustí po dokončení všetkých testovacích metód v testovacej triede. Anotácia @AfterAll je ideálna pre základné operácie so súbormi , ako je zatvorenie súboru alebo odpojenie od databázy. Anotácia @AfterAll je náprotivkom k anotácii @BeforeAll. Rovnako ako anotácia @BeforeAll, aj anotácia @AfterAll musí byť statická, musí sa vrátiť ako neplatná a veľa nesmie byť súkromná.

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

Pridaním anotovanej metódy @AfterAll do existujúcej triedy CalculatorTest sa do konzoly vytlačí nasledujúci výstup:

  Výstup anotácie AfterAll

Všimnite si, že metóda powerOffCalculator(), ktorá používa anotáciu @AfterAll, sa vytlačí na konci testovacej triedy po vykonaní všetkých testovacích metód.

Anotácia @AfterEach

Anotácia @AfterEach je náprotivkom anotácie @BeforeEach. Majú rovnaké povinné ustanovenia, ktoré sa mierne líšia od anotácií @BeforeAll a @AfterAll. Čo odlišuje anotáciu @AfterEach od anotácie @BeforeEach (okrem ich názvov), je to, že metóda @AfterEach sa spúšťa po každej testovacej metóde.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

Vykonaním triedy CalculatorTest sa do konzoly vytlačí nasledujúci výstup:

  Po každom výstupe anotácie

Výstup ukazuje, že metóda spojená s anotáciou @AfterEach (returnResults) sa vytlačí štyrikrát. Každé spustenie metódy returnResults() sa uskutoční až po vykonaní každého testu jednotky. Je to zrejmé zo skutočnosti, že výstup metódy returnResults() sa objaví po každom výstupe z metódy spojenej s anotáciou @BeforeEach.

Vylešte svoje testovacie súpravy pomocou anotácií

JUnit vám umožňuje zvládnuť procesy nesúvisiace s testom pomocou anotácií párov pred a po. Tieto štyri anotácie patria do zoznamu niekoľkých ďalších anotácií, ktoré pridávajú hodnotu vašim testom. Ďalšou z anotácií JUnit je @DisplayName.

Dva príklady kódu, ktoré zobrazujú kompletnú triedu CalculatorTest, používajú anotáciu @DisplayName. Anotácia @DisplayName vám pomôže vytvoriť zmysluplnejšie názvy pre vaše testovacie triedy a testovacie metódy.