Как да използвате анотациите @Before и @After в JUnit

Как да използвате анотациите @Before и @After в JUnit

Когато пишете модулен тестов пакет, може да има някои дейности, несвързани с тестове, които трябва да извършите. Тези дейности могат да приемат всякаква форма. Може да се наложи да се свържете с база данни или да съберете ресурси, преди да извършите тест. След изпълнението на всеки тестов случай може да се наложи да освободите някои ресурси.





MAKEUSEOF ВИДЕО НА ДЕНЯ

Извършването на която и да е от тези несвързани с тест дейности извън обхвата на единичен тестов клас може да бъде досадно, ако не и невъзможно. Успешното изпълнение на вашия тестов клас може да зависи от тези дейности, така че JUnit предоставя две двойки анотации за справяне с този проблем.





Анотацията @BeforeAll

Един тестов клас JUnit може да има един или повече тестови методи. Анотацията @BeforeAll сигнализира, че определен метод трябва да се изпълни преди всички тестови методи в тестов клас. Методът, свързан с тази анотация, се изпълнява само веднъж (в началото на теста), независимо от броя на тестовите методи в тестовия клас.





Всеки метод, който използва анотацията @BeforeAll, трябва да следва няколко условия. Тези методи трябва да имат тип връщане void, трябва да са публични и не трябва да са частни. Анотацията @BeforeAll е идеална за установяване на a връзка към база данни или създаване на нов файл. Тази статия използва тестов клас на калкулатор, за да покаже как можете да използвате анотацията @BeforeAll.

как да разпознаете песен от видеоклип

Класът калкулатор

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

Класът 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));
}
}

В този клас анотацията @BeforeAll работи с метода powerOnCalculator(), който отпечатва „Калкулаторът е включен“ преди всяко тестово изпълнение. Успешното изпълнение на теста отпечатва следния тестов отчет:



  Доклад за анотации на BeforeAll

Както можете да видите, методът, свързан с анотацията @BeforeAll, не се появява в отчета за теста. Въпреки това, ако има грешка в метода за анотация @BeforeAll, резултатите от тестовия отчет ще посочат това с грешка.

Анотацията @BeforeEach

Подобно на анотирания метод @BeforeAll, анотираният метод @BeforeEach няма да се появи в отчета за теста. Анотираният метод @BeforeEach се изпълнява преди всеки тестов метод в тестов клас. Така че, ако един тестов клас съдържа два тестови метода, тогава анотацията @BeforeEach ще се изпълни два пъти.





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

Добавянето на анотацията @BeforeEach към класа CalculatorTest води до следния резултат:

  Преди всеки изход за анотация

Методът, свързан с анотацията @BeforeEach, се изпълнява четири пъти, веднъж преди всеки тестов метод. Трябва да имате предвид, че методът @BeforeEach не е статичен, има невалиден тип връщане и не е частен, тъй като това са задължителни условия. Също така е важно да се отбележи, че методът, свързан с анотацията @BeforeEach, се изпълнява след метода @BeforeAll.





usb порт не работи на лаптоп

Анотацията @AfterAll

Метод с анотацията @AfterAll ще се изпълни, след като всички тестови методи в тестовия клас завършат своето изпълнение. Анотацията @AfterAll е идеална за основни файлови операции , като затваряне на файл или прекъсване на връзката с база данни. Анотацията @AfterAll е противоположна на анотацията @BeforeAll. Подобно на анотацията @BeforeAll, анотацията @AfterAll трябва да е статична, трябва да връща void и много да не е частна.

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

Добавянето на анотирания метод @AfterAll към съществуващия клас CalculatorTest отпечатва следния изход към конзолата:

  Изход за анотация AfterAll

Имайте предвид, че методът powerOffCalculator(), който използва анотацията @AfterAll, се отпечатва в края на тестовия клас, след като всички тестови методи се изпълнят.

Анотацията @AfterEach

Анотацията @AfterEach е противоположна на анотацията @BeforeEach. Те имат същите задължителни условия, които са малко по-различни от тези на анотациите @BeforeAll и @AfterAll. Това, което отличава анотацията @AfterEach от анотацията @BeforeEach (с изключение на техните имена), е, че методът @AfterEach се изпълнява след всеки тестов метод.

поточно видео от компютър на телевизор
@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

Изпълнението на класа CalculatorTest отпечатва следния изход към конзолата:

  AfterEach извеждане на анотация

Резултатът показва, че методът, свързан с анотацията @AfterEach (returnResults), се отпечатва четири пъти. Всяко изпълнение на метода returnResults() се случва само след изпълнението на всеки единичен тест. Това е очевидно от факта, че изходът на метода returnResults() се появява след всеки изход от метода, свързан с анотацията @BeforeEach.

Усъвършенствайте вашите тестови пакети с помощта на анотации

JUnit ви позволява да управлявате процеси, които не са свързани с тестове, като използвате поясненията за двойки преди и след. Тези четири анотации принадлежат към списък с няколко други анотации, които добавят стойност към вашите тестове. Друга анотация на JUnit е @DisplayName.

Двата примера на код, които показват пълния клас CalculatorTest, използват анотацията @DisplayName. Анотацията @DisplayName ви помага да създадете по-смислени имена за вашите тестови класове и тестови методи.