Kako koristiti oznake @Before i @After u JUnitu

Kako koristiti oznake @Before i @After u JUnitu

Kada pišete jedinični testni paket, možda ćete morati izvršiti neke aktivnosti koje nisu povezane s testiranjem. Ove aktivnosti mogu imati bilo koji oblik. Možda ćete se morati povezati s bazom podataka ili prikupiti resurse prije izvođenja testa. Nakon što se svaki testni slučaj izvrši, možda ćete morati osloboditi neke resurse.





MAKEUSEOF VIDEO DANA

Izvođenje bilo koje od ovih aktivnosti koje nisu povezane s testiranjem izvan opsega klase jediničnog testiranja može biti zamorno ako ne i nemoguće. Uspješno izvođenje vaše testne klase može ovisiti o ovim aktivnostima, tako da JUnit osigurava dva para napomena za rješavanje ovog problema.





Napomena @BeforeAll

Testna klasa JUnit može imati jednu ili više testnih metoda. Napomena @BeforeAll signalizira da bi se određena metoda trebala izvršiti prije svih testnih metoda u testnoj klasi. Metoda povezana s ovom napomenom izvršava se samo jednom (na početku testa) bez obzira na broj testnih metoda u test klasi.





Svaka metoda koja koristi napomenu @BeforeAll mora slijediti nekoliko uvjeta. Ove metode moraju imati povratni tip void, moraju biti javne i ne smiju biti privatne. Napomena @BeforeAll idealna je za uspostavljanje a povezivanje s bazom podataka ili stvaranje nove datoteke. Ovaj članak koristi testnu klasu kalkulatora da pokaže kako možete koristiti napomenu @BeforeAll.

Razred kalkulatora

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

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

U ovoj klasi, napomena @BeforeAll radi s metodom powerOnCalculator(), koja ispisuje 'Kalkulator je uključen' prije bilo kakvog testnog izvođenja. Uspješno izvršenje testa ispisuje sljedeće izvješće o testu:



  Izvješće o komentarima BeforeAll

Kao što vidite, metoda povezana s napomenom @BeforeAll ne pojavljuje se u izvješću o testiranju. Međutim, ako postoji pogreška u metodi označavanja @BeforeAll, rezultati izvješća o testiranju to će pokazati greškom.

Napomena @BeforeEach

Kao i označena metoda @BeforeAll, označena metoda @BeforeEach neće se pojaviti u izvješću o testiranju. Označena metoda @BeforeEach izvršava se prije svake testne metode u testnoj klasi. Dakle, ako testna klasa sadrži dvije testne metode, tada će se napomena @BeforeEach izvršiti dvaput.





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

Dodavanje napomene @BeforeEach klasi CalculatorTest proizvodi sljedeći izlaz:

  Prije svakog izlaza napomene

Metoda povezana s napomenom @BeforeEach izvodi se četiri puta, jednom prije svake testne metode. Trebate imati na umu da metoda @BeforeEach nije statična, ima povratni tip void i nije privatna, budući da su to obvezne odredbe. Također je važno napomenuti da se metoda povezana s napomenom @BeforeEach pokreće nakon metode @BeforeAll.





Napomena @AfterAll

Metoda s napomenom @AfterAll izvršit će se nakon što sve testne metode u testnoj klasi dovrše svoje izvršenje. Napomena @AfterAll idealna je za osnovne operacije s datotekama , poput zatvaranja datoteke ili prekida veze s bazom podataka. Napomena @AfterAll je pandan napomeni @BeforeAll. Kao i napomena @BeforeAll, napomena @AfterAll mora biti statična, mora vraćati void i mnogo toga ne smije biti privatno.

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

Dodavanje označene metode @AfterAll postojećoj klasi CalculatorTest ispisuje sljedeći izlaz na konzolu:

  Izlaz komentara AfterAll

Imajte na umu da se metoda powerOffCalculator(), koja koristi napomenu @AfterAll, ispisuje na kraju testne klase, nakon što se izvrše sve testne metode.

Napomena @AfterEach

Bilješka @AfterEach je pandan oznaci @BeforeEach. Imaju iste obvezne odredbe, koje se malo razlikuju od onih za napomene @BeforeAll i @AfterAll. Ono po čemu se primjedba @AfterEach razlikuje od primjedbe @BeforeEach (osim njihovih imena) jest to što se metoda @AfterEach pokreće nakon svake ispitne metode.

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

Izvršenje klase CalculatorTest ispisuje sljedeći izlaz na konzolu:

  Izlaz primjedbe AfterEach

Izlaz pokazuje da se metoda povezana s napomenom @AfterEach (returnResults) ispisuje četiri puta. Svako izvršavanje metode returnResults() događa se tek nakon izvršenja svakog jediničnog testa. To je vidljivo iz činjenice da se izlaz metode returnResults() pojavljuje nakon svakog izlaza iz metode povezane s napomenom @BeforeEach.

Ugladite svoje pakete testova pomoću komentara

JUnit vam omogućuje da upravljate procesima koji nisu povezani s testom pomoću napomena prije i poslije para. Ove četiri napomene pripadaju popisu nekoliko drugih napomena koje dodaju vrijednost vašim testovima. Još jedna JUnit-ova napomena je @DisplayName.

Dva primjera koda koji prikazuju kompletnu klasu CalculatorTest koriste oznaku @DisplayName. Bilješka @DisplayName pomaže vam da stvorite smislenija imena za svoje ispitne klase i ispitne metode.

instalirajte Windows 10 na USB fleš disk