Назад к вопросам
Junior
69
questionbank

Какие аннотации для фикстур существуют в JUnit?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Аннотации для фикстур в JUnit 4 и JUnit 5 отличаются:

JUnit 4:

  • @BeforeClass: Метод выполняется один раз перед всеми тестовыми методами в классе. Должен быть статическим.
  • @AfterClass: Метод выполняется один раз после всех тестовых методов в классе. Должен быть статическим.
  • @Before: Метод выполняется перед каждым тестовым методом.
  • @After: Метод выполняется после каждого тестового метода.

JUnit 5:

  • @BeforeAll: Используется для аннотирования методов, которые должны быть выполнены перед всеми тестовыми методами в текущем классе. Аналогично @BeforeClass в JUnit 4, но не требует статического метода, если класс помечен @TestInstance(Lifecycle.PER_CLASS).
  • @AfterAll: Используется для аннотирования методов, которые должны быть выполнены после всех тестовых методов в текущем классе. Аналогично @AfterClass в JUnit 4.
  • @BeforeEach: Используется для аннотирования методов, которые должны быть выполнены перед каждым тестовым методом. Аналогично @Before в JUnit 4.
  • @AfterEach: Используется для аннотирования методов, которые должны быть выполнены после каждого тестового метода. Аналогично @After в JUnit 4.

Пример использования в JUnit 5:

// Пример использования аннотаций фикстур в JUnit 5

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class FixtureExampleTest {

    @BeforeAll
    static void setupAll() {
        // Код, который выполняется один раз перед всеми тестами
        System.out.println("@BeforeAll выполнился");
    }

    @BeforeEach
    void setupEach() {
        // Код, который выполняется перед каждым тестом
        System.out.println("@BeforeEach выполнился");
    }

    @Test
    void testMethod1() {
        System.out.println("Выполняется testMethod1()");
        assertTrue(true);
    }

    @Test
    void testMethod2() {
        System.out.println("Выполняется testMethod2()");
        assertTrue(true);
    }

    @AfterEach
    void cleanupEach() {
        // Код, который выполняется после каждого теста
        System.out.println("@AfterEach выполнился");
    }

    @AfterAll
    static void cleanupAll() {
        // Код, который выполняется один раз после всех тестов
        System.out.println("@AfterAll выполнился");
    }
}