Kako uporabljati opombe @Before in @After v JUnit

Kako uporabljati opombe @Before in @After v JUnit

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.





MAKEUSEOF VIDEO DNEVA

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 povezava z bazo podatkov ali ustvarjanje nove datoteke. Ta članek uporablja preskusni razred kalkulatorja, da pokaže, kako lahko uporabite opombo @BeforeAll.

Razred kalkulator

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;
}
}

Razred CalculatorTest

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));
}
}

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:



  Poročilo o opombah BeforeAll

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.





kje brezplačno naložite glasbo
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));
}
}

Dodajanje opombe @BeforeEach v razred CalculatorTest ustvari naslednji rezultat:

  Pred vsakim izpisom opombe

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.

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

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

kako hitreje napolniti telefon
  Izhod pripisov AfterAll

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 
public void returnResults() {
System.out.println("The results are ready");
}

Izvajanje razreda CalculatorTest natisne naslednji izhod na konzolo:

  Izhod opombe AfterEach

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.