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

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

Когда вы пишете набор модульных тестов, вам могут потребоваться некоторые действия, не связанные с тестированием. Эти действия могут принимать любую форму. Перед выполнением теста может потребоваться подключиться к базе данных или собрать ресурсы. После выполнения каждого тестового случая может потребоваться освободить некоторые ресурсы.





СДЕЛАТЬ ВИДЕО ДНЯ

Выполнение любого из этих действий, не связанных с тестированием, за пределами класса модульного теста может быть утомительным, если не невозможным. Успешное выполнение вашего тестового класса может зависеть от этих действий, поэтому JUnit предоставляет две пары аннотаций для решения этой проблемы.





Аннотация @BeforeAll

Тестовый класс JUnit может иметь один или несколько тестовых методов. Аннотация @BeforeAll сигнализирует о том, что определенный метод должен выполняться перед всеми тестовыми методами в тестовом классе. Метод, связанный с этой аннотацией, выполняется только один раз (в начале теста) независимо от количества тестовых методов в тестовом классе.





Любой метод, использующий аннотацию @BeforeAll, должен соответствовать нескольким условиям. Эти методы должны иметь возвращаемый тип void, должны быть общедоступными и не должны быть закрытыми. Аннотация @BeforeAll идеально подходит для создания подключение к базе данных или создание нового файла. В этой статье используется тестовый класс калькулятора, чтобы показать, как можно использовать аннотацию @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

6А970949ЭКА850477ЭД8Д5КК24ЭК9Э58708Ф018Ф

В этом классе аннотация @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 не является статическим, имеет возвращаемый тип void и не является приватным, поскольку это обязательные условия. Также важно отметить, что метод, связанный с аннотацией @BeforeEach, запускается после метода @BeforeAll.





Аннотация @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.

macbook pro bluetooth не находит устройства

Отшлифуйте свои наборы тестов с помощью аннотаций

JUnit позволяет обрабатывать процессы, не связанные с тестированием, используя парные аннотации до и после. Эти четыре аннотации принадлежат к списку нескольких других аннотаций, которые повышают ценность ваших тестов. Еще одна аннотация JUnit — @DisplayName.

В двух примерах кода, отображающих полный класс CalculatorTest, используется аннотация @DisplayName. Аннотация @DisplayName помогает создавать более понятные имена для ваших тестовых классов и тестовых методов.