Kā lietot @Pirms un @Pēc anotācijas programmā JUnit

Kā lietot @Pirms un @Pēc anotācijas programmā JUnit

Kad rakstāt vienības pārbaudes komplektu, jums var būt jāveic dažas ar testēšanu nesaistītas darbības. Šīs darbības var izpausties jebkurā formā. Pirms pārbaudes veikšanas, iespējams, būs jāizveido savienojums ar datu bāzi vai jāapkopo resursi. Pēc katra testa gadījuma izpildes, iespējams, būs jāatbrīvo daži resursi.





DIENAS VIDEO MAKEUSEOF

Jebkuru šo ar testu nesaistīto darbību veikšana ārpus vienības pārbaudes klases darbības jomas var būt nogurdinoša vai pat neiespējama. Jūsu pārbaudes klases veiksmīga izpilde var būt atkarīga no šīm darbībām, tāpēc JUnit nodrošina divus anotāciju pārus, lai atrisinātu šo problēmu.





@Pirms visa anotācija

JUnit testa klasē var būt viena vai vairākas pārbaudes metodes. @BeforeAll anotācija norāda, ka konkrētai metodei ir jāizpilda pirms visām testa metodēm testa klasē. Ar šo anotāciju saistītā metode tiek izpildīta tikai vienu reizi (testa sākumā) neatkarīgi no testa metožu skaita testa klasē.





Jebkurai metodei, kurā tiek izmantota @BeforeAll anotācija, ir jāievēro daži noteikumi. Šīm metodēm ir jābūt nederīgam atgriešanas veidam, tām jābūt publiskām un nedrīkst būt privātām. @BeforeAll anotācija ir ideāli piemērota, lai izveidotu a savienojums ar datu bāzi vai izveidojot jaunu failu. Šajā rakstā tiek izmantota kalkulatora testa klase, lai parādītu, kā varat izmantot @BeforeAll anotāciju.

Kalkulatora klase

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

Kalkulatora pārbaudes klase

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Šajā klasē @BeforeAll anotācija darbojas ar metodi powerOnCalculator(), kas pirms jebkuras testa darbības izdrukā “Kalkulators ir ieslēgts”. Veiksmīga testa izpilde izdrukā šādu testa atskaiti:



  PirmsVisas anotācijas pārskats

Kā redzat, metode, kas saistīta ar @BeforeAll anotāciju, testa ziņojumā neparādās. Tomēr, ja @BeforeAll anotācijas metodē ir kļūda, testa ziņojuma rezultāti to norādīs ar kļūmi.

@BeforeEach anotācija

Tāpat kā @BeforeAll anotētā metode, arī @BeforeEach anotētā metode testa ziņojumā netiks parādīta. @BeforeEach anotētā metode tiek izpildīta pirms katras pārbaudes metodes testa klasē. Tātad, ja testa klasē ir divas pārbaudes metodes, @BeforeEach anotācija tiks izpildīta divas reizes.





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Pievienojot @BeforeEach anotāciju CalculatorTest klasei, tiek iegūta šāda izvade:

  PirmsKatras anotācijas izvade

Ar @BeforeEach anotāciju saistītā metode tiek izpildīta četras reizes, vienu reizi pirms katras pārbaudes metodes. Ņemiet vērā, ka @BeforeEach metode nav statiska, tai ir spēkā neesošs atgriešanas veids un tā nav privāta, jo tie ir obligāti nosacījumi. Ir arī svarīgi atzīmēt, ka ar @BeforeEach anotāciju saistītā metode tiek izpildīta pēc @BeforeAll metodes.





@AfterAll anotācija

Metode ar @AfterAll anotāciju tiks izpildīta pēc tam, kad visas testa klases pārbaudes metodes būs pabeigušas to izpildi. @AfterAll anotācija ir ideāli piemērota pamata failu operācijas , piemēram, aizverot failu vai atvienojot no datu bāzes. @AfterAll anotācija ir @BeforeAll anotācijas ekvivalents. Tāpat kā @BeforeAll anotācijai, arī @AfterAll anotācijai ir jābūt statiskai, jāatgriežas nederīgai un lielai daļai nav jābūt privātai.

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

Pievienojot @AfterAll anotēto metodi esošajai CalculatorTest klasei, konsolē tiek izdrukāta šāda izvade:

  AfterAll anotation output

Ņemiet vērā, ka metode powerOffCalculator(), kas izmanto @AfterAll anotāciju, tiek drukāta testa klases beigās pēc visu testa metožu izpildes.

@AfterEach anotācija

@AfterEach anotācija ir @BeforeEach anotācijas ekvivalents. Tiem ir vienādi obligātie nosacījumi, kas nedaudz atšķiras no @BeforeAll un @AfterAll anotācijām. @AfterEach anotācija atšķiras no @BeforeEach anotācijas (izņemot to nosaukumus), jo pēc katras testa metodes tiek izpildīta metode @AfterEach.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

Izpildot klasi CalculatorTest, konsolē tiek izdrukāta šāda izvade:

  AfterEach anotācijas izvade

Izvade parāda, ka ar @AfterEach anotāciju saistītā metode (returnResults) tiek drukāta četras reizes. Katra returnResults() metodes izpilde notiek tikai pēc katras vienības pārbaudes izpildes. Par to liecina fakts, ka returnResults() metodes izvade parādās pēc katras metodes izvades, kas saistīta ar @BeforeEach anotāciju.

kāpēc galvenais video nedarbojas?

Pulējiet savus testa komplektus, izmantojot anotācijas

JUnit ļauj apstrādāt ar testēšanu nesaistītus procesus, izmantojot pāra anotācijas pirms un pēc. Šīs četras anotācijas pieder pie vairāku citu anotāciju saraksta, kas papildina jūsu testu vērtību. Vēl viena no JUnit anotācijām ir @DisplayName.

Divos koda piemēros, kas parāda visu CalculatorTest klasi, tiek izmantota @DisplayName anotācija. @DisplayName anotācija palīdz izveidot jēgpilnākus nosaukumus jūsu testa klasēm un testa metodēm.