Kai rašote vieneto testų rinkinį, gali būti, kad jums reikia atlikti kai kurias su testavimu nesusijusias veiklas. Ši veikla gali būti bet kokia. Prieš atliekant bandymą gali tekti prisijungti prie duomenų bazės arba rinkti išteklius. Atlikus kiekvieną bandomąjį atvejį, gali tekti išleisti kai kuriuos išteklius.

Bet kurios iš šių su testavimu nesusijusių veiklų, nepriklausančių vieneto bandymo klasei, vykdymas gali būti varginantis, o gal net neįmanomas. Sėkmingas jūsų bandymo klasės vykdymas gali priklausyti nuo šios veiklos, todėl JUnit pateikia dvi poras komentarų, kad išspręstų šią problemą.

@Prieš viską anotacija

JUnit bandymo klasė gali turėti vieną ar daugiau bandymo metodų. @BeforeAll anotacija signalizuoja, kad konkretus metodas turi būti vykdomas prieš visus bandymo metodus bandymo klasėje. Su šia anotacija susietas metodas vykdomas tik vieną kartą (bandymo pradžioje), neatsižvelgiant į bandymo metodų skaičių bandymo klasėje.

Bet koks metodas, kuriame naudojama @BeforeAll anotacija, turi atitikti kelias nuostatas. Šie metodai turi turėti galiojantį grąžinimo tipą, turi būti vieši ir negali būti privatūs. @BeforeAll anotacija idealiai tinka nustatyti a

instagram viewer
prisijungimas prie duomenų bazės arba sukurti naują failą. Šiame straipsnyje naudojama skaičiuotuvo bandymo klasė, kad parodytų, kaip galite naudoti @BeforeAll komentarą.

Skaičiuoklės klasė

paketą com.app;
viešasklasėSkaičiuoklė{
viešasstatinistarptpapildyti(tarpt numeris1, tarpt skaičius2){
grąžinti skaičius1 + skaičius2;
}
viešasstatinistarptatimti(tarpt numeris1, tarpt skaičius2){
grąžinti skaičius1 - skaičius2;
}
viešasstatinistarptpadauginti(tarpt numeris1, tarpt skaičius2){
grąžinti skaičius1 * skaičius2;
}
viešasstatinistarptpadalinti(tarpt numeris1, tarpt skaičius2){
grąžinti skaičius1 / skaičius2;
}
}

CalculatorTest klasė

importuotistatinisorg.junitas.jupiteris.api.Tvirtinimai.*;
importuotiorg.junitas.jupiteris.api.Prieš viską;
importuotiorg.junitas.jupiteris.api.Išbandyk;
importuotiorg.junitas.jupiteris.api.Rodomas pavadinimas;

@DisplayName("Bandomoji klasė, rodanti, kaip naudoti į prieširpo to anotacijos“).
klasėCalculatorTest{
@Prieš viską
viešasstatinistuštumapowerOnCalculator(){
System.out.println("Skaičiuoklė įjungta");
}

@Test
@Rodomas pavadinimas("Testavimo metodas, pridedantis dvi sveikųjų skaičių reikšmes.")
viešastuštumatestAdd(){
AsertEquals(7, Skaičiuoklė.papildyti(3, 4));
}

@Test
@Rodomas pavadinimas("Testavimo metodas, atimantis vieną sveikojo skaičiaus reikšmę iš kitos.")
viešastuštumatestAtimti(){
AsertEquals(6, Skaičiuoklė.atimti(9, 3));
}

@Test
@Rodomas pavadinimas("Bandymo metodas, padauginantis dvi sveikųjų skaičių reikšmes")
viešastuštumatestDauginti(){
AsertEquals(10, Skaičiuoklė.padauginti(5, 2));
}

@Test
@Rodomas pavadinimas("Testavimo metodas, kuris padalija vieną sveikojo skaičiaus reikšmę iš kitos")
viešastuštumatestDivide(){
AsertEquals(2, Skaičiuoklė.padalinti(4, 2));
}
}

Šioje klasėje @BeforeAll anotacija veikia naudojant powerOnCalculator() metodą, kuris prieš bet kokį bandomąjį paleidimą išspausdina „Skaičiuoklė įjungta“. Sėkmingai įvykdžius bandymą, išspausdinama tokia bandymo ataskaita:

Kaip matote, metodas, susijęs su @BeforeAll anotacija, nerodomas bandymo ataskaitoje. Tačiau, jei @BeforeAll anotacijos metodo klaida, bandymo ataskaitos rezultatai parodys, kad tai nepavyko.

@BeforeEach anotacija

Kaip ir @BeforeAll anotuotas metodas, @BeforeEach anotuotas metodas nebus rodomas bandymo ataskaitoje. @BeforeEach anotuotas metodas vykdomas prieš kiekvieną bandymo metodą bandymo klasėje. Taigi, jei bandymo klasėje yra du bandymo metodai, @BeforeEach anotacija bus vykdoma du kartus.

importuotistatinisorg.junitas.jupiteris.api.Tvirtinimai.*;
importuotiorg.junitas.jupiteris.api.Prieš viską;
importuotiorg.junitas.jupiteris.api.Prieš kiekvieną;
importuotiorg.junitas.jupiteris.api.Išbandyk;
@DisplayName("Bandomoji klasė, rodanti, kaip naudoti į prieširpo to anotacijos“).
klasėCalculatorTest{
@Prieš viską
viešasstatinistuštumapowerOnCalculator(){
System.out.println("Skaičiuoklė įjungta");
}
@Prieš kiekvieną
viešastuštumaClearCalculator(){
System.out.println("Skaičiuoklė paruošta");
}
@Test
@Rodomas pavadinimas("Testavimo metodas, pridedantis dvi sveikųjų skaičių reikšmes.")
viešastuštumatestAdd(){
AsertEquals(7, Skaičiuoklė.papildyti(3, 4));
}
@Test
@Rodomas pavadinimas("Testavimo metodas, atimantis vieną sveikojo skaičiaus reikšmę iš kitos.")
viešastuštumatestAtimti(){
AsertEquals(6, Skaičiuoklė.atimti(9, 3));
}
@Test
@Rodomas pavadinimas("Bandymo metodas, padauginantis dvi sveikųjų skaičių reikšmes")
viešastuštumatestDauginti(){
AsertEquals(10, Skaičiuoklė.padauginti(5, 2));
}
@Test
@Rodomas pavadinimas("Testavimo metodas, kuris padalija vieną sveikojo skaičiaus reikšmę iš kitos")
viešastuštumatestDivide(){
AsertEquals(2, Skaičiuoklė.padalinti(4, 2));
}
}

Pridėjus @BeforeEach anotaciją prie CalculatorTest klasės, gaunama tokia išvestis:

Metodas, susietas su @BeforeEach anotacija, vykdomas keturis kartus, vieną kartą prieš kiekvieną bandymo metodą. Turėtumėte atkreipti dėmesį, kad @BeforeEach metodas nėra statinis, turi galiojantį grąžinimo tipą ir nėra privatus, nes tai yra privalomos sąlygos. Taip pat svarbu pažymėti, kad metodas, susietas su @BeforeEach anotacija, vykdomas po @BeforeAll metodo.

@AfterAll anotacija

Metodas su @AfterAll komentaru bus vykdomas, kai visi bandymo klasės bandymo metodai baigs vykdyti. @AfterAll anotacija idealiai tinka pagrindinės failų operacijos, pvz., failo uždarymas arba atsijungimas nuo duomenų bazės. @AfterAll komentaras yra @BeforeAll anotacijos atitikmuo. Kaip ir @BeforeAll komentaras, @AfterAll komentaras turi būti statinis, turi būti tuščias ir didžioji dalis ne privati.

@Po visko
viešasstatinistuštumapowerOffCalculator(){
System.out.println("Skaičiuoklė išjungta");
}

Pridėjus @AfterAll anotuotą metodą prie esamos CalculatorTest klasės, konsolėje išspausdinama ši išvestis:

Atkreipkite dėmesį, kad metodas powerOffCalculator(), kuris naudoja @AfterAll anotaciją, išspausdinamas bandymo klasės pabaigoje, kai visi bandymo metodai yra vykdomi.

@AfterEach anotacija

@AfterEach anotacija yra @BeforeEach anotacijos atitikmuo. Juose taikomos tos pačios privalomos sąlygos, kurios šiek tiek skiriasi nuo @BeforeAll ir @AfterAll komentarų. @AfterEach anotacija skiriasi nuo @BeforeEach komentaro (išskyrus jų pavadinimus) tuo, kad @AfterEach metodas veikia po kiekvieno bandymo metodo.

@AfterEach
viešastuštumagrąžinti rezultatai(){
System.out.println("Rezultatai paruošti");
}

Vykdant klasę CalculatorTest į konsolę išspausdinama ši išvestis:

Išvestis rodo, kad metodas, susietas su @AfterEach anotacija (returnResults), spausdinamas keturis kartus. Kiekvienas returnResults() metodo vykdymas įvyksta tik po kiekvieno vieneto testo vykdymo. Tai akivaizdu iš to, kad metodo returnResults() išvestis pasirodo po kiekvieno metodo, susieto su @BeforeEach anotacija, išvesties.

Nupoliruokite savo bandymų rinkinius naudodami komentarus

JUnit leidžia tvarkyti su bandymu nesusijusius procesus naudojant porų anotacijas prieš ir po. Šios keturios anotacijos priklauso kelių kitų komentarų, kurie suteikia papildomos vertės jūsų testams, sąrašui. Kitas JUnit komentaras yra @DisplayName.

Dviejuose kodo pavyzdžiuose, kuriuose rodoma visa CalculatorTest klasė, naudojama @DisplayName anotacija. @DisplayName komentaras padeda sukurti prasmingesnius bandymų klasių ir bandymo metodų pavadinimus.