Když píšete sadu testů jednotek, mohou existovat některé činnosti nesouvisející s testováním, které budete muset provést. Tyto aktivity mohou mít jakoukoli formu. Před provedením testu se možná budete muset připojit k databázi nebo shromáždit prostředky. Po provedení každého testovacího případu možná budete muset uvolnit některé prostředky.
Provádění jakékoli z těchto činností, které nesouvisejí s testováním, mimo rámec třídy unit testů může být únavné, ne-li nemožné. Úspěšné provedení vaší testovací třídy může záviset na těchto aktivitách, takže JUnit poskytuje dva páry anotací, které tento problém řeší.
Anotace @BeforeAll
Testovací třída JUnit může mít jednu nebo více testovacích metod. Anotace @BeforeAll signalizuje, že konkrétní metoda by měla být provedena před všemi testovacími metodami v testovací třídě. Metoda spojená s touto anotací se provede pouze jednou (na začátku testu) bez ohledu na počet testovacích metod ve třídě testu.
Každá metoda, která používá anotaci @BeforeAll, musí splňovat několik podmínek. Tyto metody musí mít návratový typ void, musí být veřejné a nesmí být soukromé. Anotace @BeforeAll je ideální pro vytvoření a
připojení k databázi nebo vytvoření nového souboru. Tento článek používá testovací třídu kalkulačky, která ukazuje, jak můžete použít anotaci @BeforeAll.Třída kalkulačky
balík com.app;
veřejnosttřídaKalkulačka{
veřejnoststatickýintpřidat(int číslo1, int číslo2){
vrátit se číslo 1 + číslo 2;
}
veřejnoststatickýintodčítat(int číslo1, int číslo2){
vrátit se číslo1 - číslo2;
}
veřejnoststatickýintnásobit(int číslo1, int číslo2){
vrátit se číslo1 * číslo2;
}
veřejnoststatickýintrozdělit(int číslo1, int číslo2){
vrátit se číslo1 / číslo2;
}
}
Třída CalculatorTest
importstatickýorg.junit.Jupiter.api.Tvrzení.*;
importorg.junit.Jupiter.api.Především;
importorg.junit.Jupiter.api.Test;
importorg.junit.Jupiter.api.Zobrazovaný název;@DisplayName("Testovací třída demonstrující, jak na to použití a předapo anotace.")
třídaTest kalkulačky{
@BeforeAll
veřejnoststatickýprázdnotapowerOnCalculator(){
System.out.println("Kalkulačka je zapnutá");
}@Test
@Zobrazované jméno("Testovací metoda, která sčítá dvě celočíselné hodnoty.")
veřejnostprázdnotatestAdd(){
tvrdit Rovná se(7, Kalkulačka.přidat(3, 4));
}@Test
@Zobrazované jméno("Testovací metoda, která odečítá jednu celočíselnou hodnotu od druhé.")
veřejnostprázdnotatestOdečíst(){
tvrdit Rovná se(6, Kalkulačka.odčítat(9, 3));
}@Test
@Zobrazované jméno("Testovací metoda, která násobí dvě celočíselné hodnoty")
veřejnostprázdnotatestMultiply(){
tvrdit Rovná se(10, Kalkulačka.násobit(5, 2));
}
@Test
@Zobrazované jméno("Testovací metoda, která dělí jednu celočíselnou hodnotu druhou")
veřejnostprázdnotatestDivide(){
tvrdit Rovná se(2, Kalkulačka.rozdělit(4, 2));
}
}
V této třídě pracuje anotace @BeforeAll s metodou powerOnCalculator(), která před spuštěním testu vypíše „Kalkulačka je zapnutá“. Po úspěšném provedení testu se vytiskne následující zpráva o testu:
Jak můžete vidět, metoda spojená s anotací @BeforeAll se v testovací zprávě neobjeví. Pokud však dojde k chybě v metodě anotace @BeforeAll, výsledky zprávy o testu to naznačí selháním.
Anotace @Beforeach
Stejně jako anotovaná metoda @BeforeAll se anotovaná metoda @BeforeEach nezobrazí v testovací zprávě. Anotovaná metoda @BeforeEach se provede před každou testovací metodou v testovací třídě. Pokud tedy třída testu obsahuje dvě testovací metody, anotace @BeforeEach se provede dvakrát.
importstatickýorg.junit.Jupiter.api.Tvrzení.*;
importorg.junit.Jupiter.api.Především;
importorg.junit.Jupiter.api.Před každým;
importorg.junit.Jupiter.api.Test;
@DisplayName("Testovací třída demonstrující, jak na to použití a předapo anotace.")
třídaTest kalkulačky{
@BeforeAll
veřejnoststatickýprázdnotapowerOnCalculator(){
System.out.println("Kalkulačka je zapnutá");
}
@Před každým
veřejnostprázdnotaclearCalculator(){
System.out.println("Kalkulačka je připravena");
}
@Test
@Zobrazované jméno("Testovací metoda, která sčítá dvě celočíselné hodnoty.")
veřejnostprázdnotatestAdd(){
tvrdit Rovná se(7, Kalkulačka.přidat(3, 4));
}
@Test
@Zobrazované jméno("Testovací metoda, která odečítá jednu celočíselnou hodnotu od druhé.")
veřejnostprázdnotatestOdečíst(){
tvrdit Rovná se(6, Kalkulačka.odčítat(9, 3));
}
@Test
@Zobrazované jméno("Testovací metoda, která násobí dvě celočíselné hodnoty")
veřejnostprázdnotatestMultiply(){
tvrdit Rovná se(10, Kalkulačka.násobit(5, 2));
}
@Test
@Zobrazované jméno("Testovací metoda, která dělí jednu celočíselnou hodnotu druhou")
veřejnostprázdnotatestDivide(){
tvrdit Rovná se(2, Kalkulačka.rozdělit(4, 2));
}
}
Přidání anotace @BeforeEach do třídy CalculatorTest vytvoří následující výstup:
Metoda spojená s anotací @BeforeEach se provede čtyřikrát, jednou před každou testovací metodou. Měli byste si uvědomit, že metoda @BeforeEach není statická, má návratový typ void a není soukromá, protože se jedná o povinná ustanovení. Je také důležité poznamenat, že metoda spojená s anotací @BeforeEach běží po metodě @BeforeAll.
Anotace @AfterAll
Metoda s anotací @AfterAll se spustí poté, co všechny testovací metody v testovací třídě dokončí své provádění. Anotace @AfterAll je ideální pro základní operace se soubory, jako je zavření souboru nebo odpojení od databáze. Anotace @AfterAll je protějškem k anotaci @BeforeAll. Stejně jako anotace @BeforeAll musí být anotace @AfterAll statická, musí se vrátit jako neplatná a mnoho nesmí být soukromá.
@Po všem
veřejnoststatickýprázdnotapowerOffKalkulačka(){
System.out.println("Kalkulačka je vypnutá");
}
Přidání anotované metody @AfterAll do existující třídy CalculatorTest vytiskne do konzoly následující výstup:
Všimněte si, že metoda powerOffCalculator(), která používá anotaci @AfterAll, se po provedení všech testovacích metod vytiskne na konec třídy testu.
Anotace @AfterEach
Anotace @AfterEach je protějškem k anotaci @BeforeEach. Mají stejná povinná ustanovení, která se mírně liší od anotací @BeforeAll a @AfterAll. To, co odlišuje anotaci @AfterEach od anotace @BeforeEach (kromě jejich jmen), je to, že metoda @AfterEach se spustí po každé testovací metodě.
@Po každém
veřejnostprázdnotareturnResults(){
System.out.println("Výsledky jsou připraveny");
}
Spuštění třídy CalculatorTest vytiskne do konzoly následující výstup:
Výstup ukazuje, že metoda spojená s anotací @AfterEach (returnResults) se vytiskne čtyřikrát. Ke každému provedení metody returnResults() dojde až po provedení každého testu jednotky. To je zřejmé ze skutečnosti, že výstup metody returnResults() se objeví po každém výstupu z metody spojené s anotací @BeforeEach.
Vyleštěte své testovací sady pomocí anotací
JUnit vám umožňuje zpracovávat procesy, které nesouvisejí s testováním, pomocí párových anotací před a po. Tyto čtyři anotace patří do seznamu několika dalších anotací, které přidávají hodnotu vašim testům. Další z anotací JUnit je @DisplayName.
Dva příklady kódu, které zobrazují úplnou třídu CalculatorTest, používají anotaci @DisplayName. Anotace @DisplayName vám pomůže vytvořit smysluplnější názvy pro vaše testovací třídy a testovací metody.