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.
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
balík com.app;
verejnostitriedaKalkulačka{
verejnostistatickéintpridať(int číslo1, int číslo2){
vrátiť číslo1 + číslo2;
}
verejnostistatickéintodčítať(int číslo1, int číslo2){
vrátiť číslo1 - číslo2;
}
verejnostistatickéintmnožiť(int číslo1, int číslo2){
vrátiť číslo1 * číslo2;
}
verejnostistatickéintrozdeliť(int číslo1, int číslo2){
vrátiť num1 / num2;
}
}
Testovacia trieda kalkulačky
importovaťstatickéorg.junit.jupiter.api.Tvrdenia.*;
importovaťorg.junit.jupiter.api.Predtým;
importovaťorg.junit.jupiter.api.Test;
importovaťorg.junit.jupiter.api.Zobraziť meno;@DisplayName("Testovacia trieda demonštrujúca, ako na to použitie a predtýmapo anotácie.")
triedaTest kalkulačky{
@BeforeAll
verejnostistatickéneplatnépowerOnCalculator(){
System.out.println("Kalkulačka je zapnutá");
}@Test
@Zobraziť meno("Testovacia metóda, ktorá pridáva dve celočíselné hodnoty.")
verejnostineplatnétestAdd(){
tvrdiť Rovná sa(7, Kalkulačka.pridať(3, 4));
}@Test
@Zobraziť meno("Testovacia metóda, ktorá odpočítava jednu celočíselnú hodnotu od druhej.")
verejnostineplatnétestOdčítanie(){
tvrdiť Rovná sa(6, Kalkulačka.odčítať(9, 3));
}@Test
@Zobraziť meno("Testovacia metóda, ktorá násobí dve celočíselné hodnoty")
verejnostineplatnétestMultiply(){
tvrdiť Rovná sa(10, Kalkulačka.násobiť(5, 2));
}
@Test
@Zobraziť meno("Testovacia metóda, ktorá delí jednu celočíselnú hodnotu druhou")
verejnostineplatnétestDivide(){
tvrdiť Rovná sa(2, Kalkulačka.rozdeliť(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:
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.
importovaťstatickéorg.junit.jupiter.api.Tvrdenia.*;
importovaťorg.junit.jupiter.api.Predtým;
importovaťorg.junit.jupiter.api.Pred každým;
importovaťorg.junit.jupiter.api.Test;
@DisplayName("Testovacia trieda demonštrujúca, ako na to použitie a predtýmapo anotácie.")
triedaTest kalkulačky{
@BeforeAll
verejnostistatickéneplatnépowerOnCalculator(){
System.out.println("Kalkulačka je zapnutá");
}
@Pred každým
verejnostineplatnéclearCalculator(){
System.out.println("Kalkulačka je pripravená");
}
@Test
@Zobraziť meno("Testovacia metóda, ktorá pridáva dve celočíselné hodnoty.")
verejnostineplatnétestAdd(){
tvrdiť Rovná sa(7, Kalkulačka.pridať(3, 4));
}
@Test
@Zobraziť meno("Testovacia metóda, ktorá odpočítava jednu celočíselnú hodnotu od druhej.")
verejnostineplatnétestOdčítanie(){
tvrdiť Rovná sa(6, Kalkulačka.odčítať(9, 3));
}
@Test
@Zobraziť meno("Testovacia metóda, ktorá násobí dve celočíselné hodnoty")
verejnostineplatnétestMultiply(){
tvrdiť Rovná sa(10, Kalkulačka.násobiť(5, 2));
}
@Test
@Zobraziť meno("Testovacia metóda, ktorá delí jednu celočíselnú hodnotu druhou")
verejnostineplatnétestDivide(){
tvrdiť Rovná sa(2, Kalkulačka.rozdeliť(4, 2));
}
}
Pridaním anotácie @BeforeEach do triedy CalculatorTest sa získa nasledujúci výstup:
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ľakrát nesmie byť súkromná.
@Po všetkom
verejnostistatickéneplatnépowerOffKalkulačka(){
System.out.println("Kalkulačka je vypnutá");
}
Pridaním anotovanej metódy @AfterAll do existujúcej triedy CalculatorTest sa do konzoly vytlačí nasledujúci výstup:
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.
@Po každom
verejnostineplatnéreturnResults(){
System.out.println("Výsledky sú pripravené");
}
Vykonaním triedy CalculatorTest sa do konzoly vytlačí nasledujúci výstup:
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.