Când scrieți o suită de teste unitare, este posibil să existe unele activități care nu sunt legate de testare pe care trebuie să le efectuați. Aceste activități pot lua orice formă. Poate fi necesar să vă conectați la o bază de date sau să aduni resurse înainte de a efectua un test. După ce fiecare caz de testare se execută, poate fi necesar să eliberați anumite resurse.

Efectuarea oricăreia dintre aceste activități care nu sunt legate de testare în afara domeniului de aplicare a unei clase de test unitar poate fi obositoare, dacă nu imposibilă. Execuția cu succes a clasei dvs. de testare poate depinde de aceste activități, așa că JUnit oferă două perechi de adnotări pentru a rezolva această problemă.

Adnotarea @BeforeAll

O clasă de testare JUnit poate avea una sau mai multe metode de testare. Adnotarea @BeforeAll semnalează că o anumită metodă ar trebui să fie executată înaintea tuturor metodelor de testare dintr-o clasă de testare. Metoda asociată cu această adnotare se execută o singură dată (la începutul testului), indiferent de numărul de metode de testare din clasa de testare.

instagram viewer

Orice metodă care utilizează adnotarea @BeforeAll trebuie să respecte câteva prevederi. Aceste metode trebuie să aibă un tip de returnare void, trebuie să fie publice și nu trebuie să fie private. Adnotarea @BeforeAll este ideală pentru stabilirea unui conexiune la o bază de date sau crearea unui nou fișier. Acest articol folosește o clasă de testare a calculatorului pentru a arăta cum puteți utiliza adnotarea @BeforeAll.

Clasa Calculatoarelor

pachet com.app;
publicclasăCalculator{
publicstaticintadăuga(int num1, int num2){
întoarcere num1 + num2;
}
publicstaticintscădea(int num1, int num2){
întoarcere num1 - num2;
}
publicstaticintmultiplica(int num1, int num2){
întoarcere num1 * num2;
}
publicstaticintdivide(int num1, int num2){
întoarcere num1 / num2;
}
}

Clasa CalculatorTest

importstaticorg.junit.Jupiter.api.Aserţiuni.*;
importorg.junit.Jupiter.api.Înainte de Toate;
importorg.junit.Jupiter.api.Test;
importorg.junit.Jupiter.api.Numele de afișare;

@DisplayName("Clasa de testare care demonstrează cum să utilizare cel inainte deșidupă adnotări.")
clasăCalculatorTest{
@BeforeAll
publicstaticgolpowerOnCalculator(){
System.out.println("Calculatorul este pornit");
}

@Test
@Numele de afișare("Metodă de testare care adaugă două valori întregi.")
publicgoltestAdd(){
assertEquals(7, Calculator.adăuga(3, 4));
}

@Test
@Numele de afișare("Metodă de testare care scade o valoare întreagă din alta.")
publicgoltestSubtract(){
assertEquals(6, Calculator.scădea(9, 3));
}

@Test
@Numele de afișare("Metodă de testare care înmulțește două valori întregi")
publicgoltestMultiply(){
assertEquals(10, Calculator.multiplica(5, 2));
}

@Test
@Numele de afișare("Metodă de testare care împarte o valoare întreagă la alta")
publicgoltestDivide(){
assertEquals(2, Calculator.divide(4, 2));
}
}

În această clasă, adnotarea @BeforeAll funcționează cu metoda powerOnCalculator(), care afișează „Calculatorul este pornit” înainte de orice rulare de testare. Execuția cu succes a testului tipări următorul raport de testare:

După cum puteți vedea, metoda asociată adnotării @BeforeAll nu apare în raportul de testare. Cu toate acestea, dacă există o eroare în metoda de adnotare @BeforeAll, rezultatele raportului de testare vor indica acest lucru cu un eșec.

Adnotarea @BeforeEach

Asemenea metodei adnotate @BeforeAll, metoda adnotată @BeforeEach nu va apărea în raportul de testare. Metoda adnotată @BeforeEach se execută înaintea fiecărei metode de testare dintr-o clasă de testare. Deci, dacă o clasă de testare conține două metode de testare, atunci adnotarea @BeforeEach se va executa de două ori.

importstaticorg.junit.Jupiter.api.Aserţiuni.*;
importorg.junit.Jupiter.api.Înainte de Toate;
importorg.junit.Jupiter.api.Înainte de fiecare;
importorg.junit.Jupiter.api.Test;
@DisplayName("Clasa de testare care demonstrează cum să utilizare cel inainte deșidupă adnotări.")
clasăCalculatorTest{
@BeforeAll
publicstaticgolpowerOnCalculator(){
System.out.println("Calculatorul este pornit");
}
@BeforeEach
publicgolclearCalculator(){
System.out.println("Calculatorul este gata");
}
@Test
@Numele de afișare("Metodă de testare care adaugă două valori întregi.")
publicgoltestAdd(){
assertEquals(7, Calculator.adăuga(3, 4));
}
@Test
@Numele de afișare("Metodă de testare care scade o valoare întreagă din alta.")
publicgoltestSubtract(){
assertEquals(6, Calculator.scădea(9, 3));
}
@Test
@Numele de afișare("Metodă de testare care înmulțește două valori întregi")
publicgoltestMultiply(){
assertEquals(10, Calculator.multiplica(5, 2));
}
@Test
@Numele de afișare("Metodă de testare care împarte o valoare întreagă la alta")
publicgoltestDivide(){
assertEquals(2, Calculator.divide(4, 2));
}
}

Adăugarea adnotării @BeforeEach la clasa CalculatorTest produce următoarea ieșire:

Metoda asociată adnotării @BeforeEach se execută de patru ori, o dată înainte de fiecare metodă de testare. Trebuie să rețineți că metoda @BeforeEach nu este statică, are un tip de returnare void și nu este privată, deoarece acestea sunt prevederi obligatorii. De asemenea, este important să rețineți că metoda asociată adnotării @BeforeEach rulează după metoda @BeforeAll.

Adnotarea @AfterAll

O metodă cu adnotarea @AfterAll se va executa după ce toate metodele de testare din clasa de testare își finalizează execuția. Adnotarea @AfterAll este ideală pentru operațiuni de bază cu fișiere, cum ar fi închiderea unui fișier sau deconectarea de la o bază de date. Adnotarea @AfterAll este omologul adnotării @BeforeAll. La fel ca adnotarea @BeforeAll, adnotarea @AfterAll trebuie să fie statică, trebuie să returneze void și multe să nu fie private.

@Dupa toate acestea
publicstaticgolpowerOffCalculator(){
System.out.println("Calculatorul este oprit");
}

Adăugarea metodei adnotate @AfterAll la clasa CalculatorTest existentă imprimă următoarea ieșire pe consolă:

Rețineți că metoda powerOffCalculator(), care utilizează adnotarea @AfterAll, se tipărește la sfârșitul clasei de testare, după ce toate metodele de testare sunt executate.

Adnotarea @AfterEach

Adnotarea @AfterEach este omologul adnotării @BeforeEach. Au aceleași prevederi obligatorii, care sunt ușor diferite de cele ale adnotărilor @BeforeAll și @AfterAll. Ceea ce distinge adnotarea @AfterEach de adnotarea @BeforeEach (altele decât numele lor) este că metoda @AfterEach rulează după fiecare metodă de testare.

@După fiecare
publicgolreturnResults(){
System.out.println("Rezultatele sunt gata");
}

Executarea clasei CalculatorTest imprimă următoarea ieșire pe consolă:

Rezultatul arată că metoda asociată cu adnotarea @AfterEach (returnResults) se tipărește de patru ori. Fiecare execuție a metodei returnResults() are loc numai după executarea fiecărui test unitar. Acest lucru este evident prin faptul că rezultatul metodei returnResults() apare după fiecare ieșire din metoda asociată adnotării @BeforeEach.

Polizați-vă suitele de testare folosind adnotări

JUnit vă permite să gestionați procese care nu sunt legate de testare folosind adnotările perechi înainte și după. Aceste patru adnotări aparțin unei liste de alte câteva adnotări care adaugă valoare testelor dvs. O alta dintre adnotările lui JUnit este @DisplayName.

Cele două exemple de cod care afișează clasa CalculatorTest completă folosesc adnotarea @DisplayName. Adnotarea @DisplayName vă ajută să creați nume mai semnificative pentru clasele și metodele de testare.