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.