JUnit 5 — это современный, модульный фреймворк для тестирования на Java, который пришёл на смену JUnit 4. Его настройка в новом или существующем проекте может быть выполнена за один день, если следовать чёткому плану. Цель — не просто добавить библиотеки в classpath, а создать структурированную, поддерживаемую основу для модульного тестирования, которая будет масштабироваться вместе с проектом.
Шаг 1: Инициализация проекта и добавление зависимостей. Если вы используете Maven, откройте `pom.xml` и добавьте зависимости в раздел ``. Минимальный набор для JUnit Jupiter (ядро JUnit 5):
```
org.junit.jupiter
junit-jupiter
5.10.0
test
```
Эта зависимость транзитивно включает в себя модули `junit-jupiter-api` (для написания тестов), `junit-jupiter-engine` (для запуска) и `junit-jupiter-params` (для параметризованных тестов). Для проектов на Gradle добавьте в `build.gradle` в блок `dependencies`: `testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'`. Убедитесь, что используется правильный плагин: `test { useJUnitPlatform() }`.
Шаг 2: Настройка структуры каталогов. Стандартная структура Maven/Gradle предполагает размещение исходного кода тестов в `src/test/java`. Классы тестов должны находиться в том же пакете, что и тестируемые классы, но в source root для тестов. Создайте эту директорию, если её нет. Ресурсы для тестов (тестовые файлы, конфигурации) помещайте в `src/test/resources`.
Шаг 3: Написание первого теста. Создайте класс в `src/test/java`. Имя класса часто соответствует имени тестируемого класса с суффиксом `Test`. Например, для `Calculator.java` создайте `CalculatorTest.java`. Аннотируйте методы тестов `@Test` из `org.junit.jupiter.api.Test`.
```
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
void testAddition() {
Calculator calc = new Calculator();
assertEquals(5, calc.add(2, 3));
}
}
```
Запустите тест из IDE (IntelliJ IDEA, Eclipse) или через Maven (`mvn test`) / Gradle (`gradle test`). Если всё настроено верно, тест пройдёт.
Шаг 4: Конфигурация и расширенные возможности. JUnit 5 сильно настраивается через файл `junit-platform.properties`, который можно разместить в `src/test/resources`. В нём можно задать глобальные параметры, например, отключить тесты по тэгам или задать порядок выполнения. Пример содержимого файла:
```
junit.jupiter.testinstance.lifecycle.default = per_class
junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition
```
Для управления жизненным циклом тестов используйте аннотации `@BeforeEach` (выполняется перед каждым тестом), `@AfterEach`, `@BeforeAll` (перед всеми тестами в классе, метод должен быть static), `@AfterAll`. Это заменяет `@Before` и `@After` из JUnit 4.
Шаг 5: Параметризованные тесты. Это мощная функция для запуска одного теста с разными наборами данных. Подключите зависимость `junit-jupiter-params` (уже включена в `junit-jupiter`). Используйте аннотацию `@ParameterizedTest` вместе с источниками данных, например, `@ValueSource`, `@CsvSource`.
```
@ParameterizedTest
@CsvSource({"2, 3, 5", "0, 0, 0", "-1, 5, 4"})
void testAddMultiple(int a, int b, int expected) {
Calculator calc = new Calculator();
assertEquals(expected, calc.add(a, b));
}
```
Шаг 6: Теги и фильтрация. Помечайте тесты тэгами с помощью `@Tag("integration")` или `@Tag("fast")`. Затем можно запускать только определённые группы тестов. В Maven: `mvn test -Dgroups="fast"`. В Gradle: `test { useJUnitPlatform { includeTags 'fast' } }`. В `junit-platform.properties` можно исключить тэги глобально.
Шаг 7: Интеграция с Mockito (для мокинг зависимостей). Добавьте зависимость Mockito в `pom.xml` или `build.gradle`:
```
org.mockito
mockito-junit-jupiter
5.7.0
test
```
Теперь вы можете использовать `@ExtendWith(MockitoExtension.class)` для автоматического создания моков через `@Mock` и инжекта их в тестируемый объект через `@InjectMocks`.
Шаг 8: Настройка покрытия кода (Code Coverage). Хотя это не часть JUnit, это логичный следующий шаг. Добавьте плагин JaCoCo в Maven или Gradle. Для Maven в `pom.xml` в раздел `` -> ``:
```
org.jacoco
jacoco-maven-plugin
0.8.10
prepare-agent
report
test
report
```
После запуска `mvn test` отчёт появится в `target/site/jacoco/index.html`.
Шаг 9: Интеграция в CI/CD (например, GitHub Actions). Создайте простой workflow-файл, который будет запускать `mvn test` или `gradle test` на каждый push или pull request. Это обеспечит постоянную проверку кодовой базы.
К концу дня у вас будет полностью рабочий тестовый фреймворк с базовыми тестами, поддержкой параметризации, мокинга, тэгов и покрытия кода. Ключевой момент — начать с простого, написать несколько значимых тестов для критического функционала и затем постепенно расширять покрытие, используя все возможности JUnit 5 для создания надёжных и поддерживаемых тестов.
Как настроить JUnit за 1 день
Пошаговое практическое руководство по настройке JUnit 5 в Java-проекте за один рабочий день. Рассматриваются добавление зависимостей, структура каталогов, написание тестов, параметризация, интеграция с Mockito, настройка JaCoCo для покрытия кода и CI/CD.
266
3
Комментарии (15)