Ko pišete zbirko testov enote, boste morda morali izvesti nekatere dejavnosti, ki niso povezane s testi. Te dejavnosti so lahko kakršne koli oblike. Pred izvedbo preizkusa se boste morda morali povezati z bazo podatkov ali zbrati vire. Po izvedbi vsakega preskusnega primera boste morda morali sprostiti nekaj virov.

Izvajanje katere koli od teh dejavnosti, ki niso povezane s testom, zunaj obsega razreda testa enote je lahko dolgočasno, če ne nemogoče. Uspešna izvedba vašega testnega razreda je lahko odvisna od teh dejavnosti, zato JUnit nudi dva para opomb za reševanje te težave.

Opomba @BeforeAll

Testni razred JUnit ima lahko eno ali več testnih metod. Opomba @BeforeAll sporoča, da se mora določena metoda izvesti pred vsemi testnimi metodami v testnem razredu. Metoda, povezana s to opombo, se izvede samo enkrat (na začetku preizkusa) ne glede na število testnih metod v testnem razredu.

Vsaka metoda, ki uporablja opombo @BeforeAll, mora upoštevati nekaj določil. Te metode morajo imeti vrnjen tip void, morajo biti javne in ne smejo biti zasebne. Opomba @BeforeAll je idealna za vzpostavitev

instagram viewer
povezava z bazo podatkov ali ustvarjanje nove datoteke. Ta članek uporablja preskusni razred kalkulatorja, da pokaže, kako lahko uporabite opombo @BeforeAll.

Razred kalkulator

paket com.app;
javnostirazredKalkulator{
javnostistatičnaintdodati(int num1, int num2){
vrnitev num1 + num2;
}
javnostistatičnaintodšteti(int num1, int num2){
vrnitev num1 - num2;
}
javnostistatičnaintpomnožiti(int num1, int num2){
vrnitev num1 * num2;
}
javnostistatičnaintrazdeliti(int num1, int num2){
vrnitev num1 / num2;
}
}

Razred CalculatorTest

uvozstatičnaorg.junit.jupiter.api.Trditve.*;
uvozorg.junit.jupiter.api.Pred Vsem;
uvozorg.junit.jupiter.api.Test;
uvozorg.junit.jupiter.api.DisplayName;

@DisplayName("Preizkusni razred, ki prikazuje, kako uporaba the prejinpo opombe.")
razredCalculatorTest{
@Predvsem
javnostistatičnaprazninapowerOnCalculator(){
System.out.println("Kalkulator je vklopljen");
}

@Test
@DisplayName("Testna metoda, ki sešteje dve celoštevilski vrednosti.")
javnostiprazninatestAdd(){
assertEquals(7, Kalkulator.dodaj(3, 4));
}

@Test
@DisplayName("Metoda testiranja, ki odšteje eno celo število od druge.")
javnostiprazninatestSubtract(){
assertEquals(6, Kalkulator.odšteti(9, 3));
}

@Test
@DisplayName("Testna metoda, ki pomnoži dve celoštevilski vrednosti")
javnostiprazninatestMultiply(){
assertEquals(10, Kalkulator.množiti(5, 2));
}

@Test
@DisplayName("Testna metoda, ki eno celoštevilsko vrednost deli z drugo")
javnostiprazninatestDivide(){
assertEquals(2, Kalkulator.deliti(4, 2));
}
}

V tem razredu opomba @BeforeAll deluje z metodo powerOnCalculator(), ki pred kakršnim koli preskusnim zagonom natisne »Kalkulator je vklopljen«. Uspešna izvedba preizkusa natisne naslednje poročilo o preskusu:

Kot lahko vidite, metoda, povezana z opombo @BeforeAll, ni prikazana v poročilu o preskusu. Če pa pride do napake v metodi označevanja @BeforeAll, bodo rezultati poročila o preskusu to pokazali z napako.

Opomba @BeforeEach

Tako kot označena metoda @BeforeAll, tudi označena metoda @BeforeEach ne bo prikazana v poročilu o preskusu. Označena metoda @BeforeEach se izvede pred vsako preskusno metodo v testnem razredu. Torej, če preskusni razred vsebuje dve preskusni metodi, se bo opomba @BeforeEach izvedla dvakrat.

uvozstatičnaorg.junit.jupiter.api.Trditve.*;
uvozorg.junit.jupiter.api.Pred Vsem;
uvozorg.junit.jupiter.api.BeforeEach;
uvozorg.junit.jupiter.api.Test;
@DisplayName("Preizkusni razred, ki prikazuje, kako uporaba the prejinpo opombe.")
razredCalculatorTest{
@Predvsem
javnostistatičnaprazninapowerOnCalculator(){
System.out.println("Kalkulator je vklopljen");
}
@PredVsako
javnostiprazninaclearCalculator(){
System.out.println("Kalkulator je pripravljen");
}
@Test
@DisplayName("Testna metoda, ki sešteje dve celoštevilski vrednosti.")
javnostiprazninatestAdd(){
assertEquals(7, Kalkulator.dodaj(3, 4));
}
@Test
@DisplayName("Metoda testiranja, ki odšteje eno celo število od druge.")
javnostiprazninatestSubtract(){
assertEquals(6, Kalkulator.odšteti(9, 3));
}
@Test
@DisplayName("Testna metoda, ki pomnoži dve celoštevilski vrednosti")
javnostiprazninatestMultiply(){
assertEquals(10, Kalkulator.množiti(5, 2));
}
@Test
@DisplayName("Testna metoda, ki eno celoštevilsko vrednost deli z drugo")
javnostiprazninatestDivide(){
assertEquals(2, Kalkulator.deliti(4, 2));
}
}

Dodajanje opombe @BeforeEach v razred CalculatorTest ustvari naslednji rezultat:

Metoda, povezana z opombo @BeforeEach, se izvede štirikrat, enkrat pred vsako preskusno metodo. Upoštevati morate, da metoda @BeforeEach ni statična, ima vrnjen tip void in ni zasebna, saj so to obvezni pogoji. Pomembno je tudi omeniti, da se metoda, povezana z opombo @BeforeEach, izvaja za metodo @BeforeAll.

Opomba @AfterAll

Metoda z opombo @AfterAll se bo izvedla, ko bodo vse testne metode v testnem razredu dokončale svojo izvedbo. Opomba @AfterAll je idealna za osnovne operacije z datotekami, na primer zapiranje datoteke ali prekinitev povezave z bazo podatkov. Pripis @AfterAll je protipostavka pripisu @BeforeAll. Tako kot pripis @BeforeAll mora biti tudi pripis @AfterAll statičen, vrniti mora void in velikokrat ne sme biti zaseben.

@Konec koncev
javnostistatičnaprazninapowerOffCalculator(){
System.out.println("Kalkulator je izklopljen");
}

Dodajanje označene metode @AfterAll obstoječemu razredu CalculatorTest natisne naslednji izhod na konzolo:

Upoštevajte, da se metoda powerOffCalculator(), ki uporablja opombo @AfterAll, natisne na koncu preskusnega razreda po izvedbi vseh preskusnih metod.

Opomba @AfterEach

Pripis @AfterEach je protipostavka pripisu @BeforeEach. Imajo enake obvezne določbe, ki se nekoliko razlikujejo od opomb @BeforeAll in @AfterAll. Pripis @AfterEach razlikuje od pripisa @BeforeEach (razen njunih imen) to, da se metoda @AfterEach izvaja za vsako testno metodo.

@AfterEach
javnostiprazninareturnResults(){
System.out.println("Rezultati so pripravljeni");
}

Izvajanje razreda CalculatorTest natisne naslednji izhod na konzolo:

Izhod kaže, da se metoda, povezana z opombo @AfterEach (returnResults), natisne štirikrat. Vsaka izvedba metode returnResults() se zgodi šele po izvedbi vsakega testa enote. To je razvidno iz dejstva, da se izhod metode returnResults() pojavi po vsakem izhodu metode, povezane z opombo @BeforeEach.

Izpopolnite svoje testne zbirke z opombami

JUnit vam omogoča, da obdelujete procese, ki niso povezani s testom, z uporabo pripisov parov pred in po. Te štiri opombe spadajo na seznam več drugih opomb, ki dodajo vrednost vašim testom. Druga opomba JUnit je @DisplayName.

Dva primera kode, ki prikazujeta celoten razred CalculatorTest, uporabljata opombo @DisplayName. Opomba @DisplayName vam pomaga ustvariti bolj smiselna imena za vaše testne razrede in testne metode.