Ответ
Жизненный цикл unit-теста в JUnit 5 управляется аннотациями и состоит из следующих фаз:
1. Инициализация класса (@BeforeAll):
- Выполняется один раз перед всеми тестовыми методами в классе.
- Используется для настройки глобальных ресурсов (подключение к БД, запуск сервера).
2. Подготовка к тесту (@BeforeEach):
- Выполняется перед каждым тестовым методом.
- Цель — привести систему в известное состояние (создание чистого экземпляра тестируемого класса, сброс моков).
3. Выполнение теста (@Test):
- Запускается сам тестовый метод, содержащий вызов тестируемого кода и проверки (assertions).
4. Верификация результатов:
- Утверждения (assertions) из библиотек JUnit (AssertJ, Hamcrest) проверяют соответствие фактического результата ожидаемому.
5. Очистка после теста (@AfterEach):
- Выполняется после каждого тестового метода.
- Цель — освободить ресурсы, использованные в тесте (закрытие файлов, очистка временных данных).
6. Финализация класса (@AfterAll):
- Выполняется один раз после всех тестовых методов в классе.
- Используется для освобождения глобальных ресурсов (остановка сервера, разрыв соединения с БД).
Пример на Java (JUnit 5):
import org.junit.jupiter.api.*;
class CalculatorTest {
private Calculator calculator;
@BeforeAll
static void initAll() {
System.out.println("Инициализация перед всеми тестами");
}
@BeforeEach
void init() {
calculator = new Calculator(); // Чистый экземпляр перед каждым тестом
}
@Test
void testAddition() {
int result = calculator.add(2, 3);
Assertions.assertEquals(5, result); // Проверка (assertion)
}
@AfterEach
void tearDown() {
calculator = null; // Очистка ссылки
}
@AfterAll
static void tearDownAll() {
System.out.println("Финализация после всех тестов");
}
}