Что такое JUnit?
JUnit — это стандартный фреймворк для модульного тестирования Java-приложений. Он предоставляет аннотации, утверждения и механизмы для создания и выполнения тестов, поддерживая методологию Test-Driven Development (TDD).
Основные версии JUnit
- JUnit 4 — использует аннотации, широко распространён
- JUnit 5 (Jupiter) — современная архитектура, лямбда-поддержка
- JUnit Vintage — обратная совместимость с JUnit 3/4
Установка и настройка
Добавление зависимости в Maven:
Для Gradle:
1testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
Пример простого теста
1import org.junit.jupiter.api.Test;
2import org.junit.jupiter.api.BeforeEach;
3import org.junit.jupiter.api.DisplayName;
4import static org.junit.jupiter.api.Assertions.*;
5
6class CalculatorTest {
7
8 private Calculator calculator;
9
10 @BeforeEach
11 void setUp() {
12 calculator = new Calculator();
13 }
14
15 @Test
16 @DisplayName("Проверка сложения двух чисел")
17 void testAddition() {
18 assertEquals(5, calculator.add(2, 3));
19 assertEquals(0, calculator.add(-1, 1));
20 }
21
22 @Test
23 void testDivisionByZero() {
24 assertThrows(ArithmeticException.class,
25 () -> calculator.divide(10, 0));
26 }
27}
Основные аннотации JUnit 5
@Test
— помечает метод как тест@BeforeEach
— выполняется перед каждым тестом@AfterEach
— выполняется после каждого теста@BeforeAll
— выполняется один раз перед всеми тестами@AfterAll
— выполняется один раз после всех тестов@DisplayName
— человекочитаемое имя теста@ParameterizedTest
— параметризованные тесты
Утверждения (Assertions)
1// Базовые утверждения
2assertEquals(expected, actual);
3assertTrue(condition);
4assertFalse(condition);
5assertNull(object);
6assertNotNull(object);
7
8// Групповые утверждения
9assertAll("person",
10 () -> assertEquals("John", person.getFirstName()),
11 () -> assertEquals("Doe", person.getLastName())
12);
Преимущества JUnit
- Стандарт де-факто для Java-тестирования
- Интеграция со всеми популярными IDE
- Поддержка параметризованных и динамических тестов
- Расширяемость через Extensions API
- Отличная интеграция с CI/CD системами
Рекомендации по использованию
- Следуй принципу AAA: Arrange, Act, Assert
- Пиши независимые тесты, которые можно выполнять в любом порядке
- Используй осмысленные имена тестов и @DisplayName
- Группируй связанные тесты в отдельные классы
FAQ
В чём разница между JUnit 4 и JUnit 5?
JUnit 5 имеет модульную архитектуру, поддерживает лямбда-выражения, динамические тесты и предоставляет более богатый API для создания расширений.
Можно ли использовать JUnit для интеграционных тестов?
Да, JUnit подходит для интеграционных тестов, особенно в сочетании с Spring Boot Test и Testcontainers.