Gymterview
junior

Каковы основные отличия JUnit 5 от JUnit 4?

JUnit 5 — полностью переписанный фреймворк для тестирования, состоящий из трёх модулей:

  • JUnit Platform — основа для запуска тестовых фреймворков на JVM.
  • JUnit Jupiter — новая модель программирования и расширений для написания тестов.
  • JUnit Vintage — обеспечивает обратную совместимость с JUnit 3 и JUnit 4.

Основные отличия

Критерий JUnit 4 JUnit 5
Пакет org.junit org.junit.jupiter.api
Аннотация теста @Test (с параметрами expected, timeout) @Test (без параметров)
Перед каждым тестом @Before @BeforeEach
После каждого теста @After @AfterEach
Перед всеми тестами @BeforeClass @BeforeAll
После всех тестов @AfterClass @AfterAll
Отключение теста @Ignore @Disabled
Расширения @RunWith, @Rule @ExtendWith
Минимальная версия Java Java 5 Java 8
Пример кода: JUnit 4 vs JUnit 5
// JUnit 4
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.assertEquals;

public class CalculatorTest {
    private Calculator calculator;

    @Before
    public void setUp() {
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        assertEquals(5, calculator.add(2, 3));
    }
}

// JUnit 5
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    void testAdd() {
        assertEquals(5, calculator.add(2, 3));
    }
}

В JUnit 5 тестовые классы и методы не обязаны быть public.

На собеседовании: интервьюер ожидает знание модульной архитектуры JUnit 5 (Platform / Jupiter / Vintage) и конкретных отличий в аннотациях. Частая ошибка — забыть про @ExtendWith как замену @RunWith + @Rule.