Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Зачем нужны тесты и что такое JUnit

Автоматический тест — небольшой метод, который вызывает ваш код с известными данными и проверяет результат. Вы пишете его один раз, а потом запускаете сотни таких проверок за пару секунд после каждого изменения. Если правка в одном месте сломала что-то в другом, об этом сразу скажет тест, а не пользователь через неделю.

В учебнике вы уже написали первый тест на JUnit. Этот курс идёт дальше: как организовать тесты, читать отчёты о падениях, проверять ошибки и граничные случаи и как заменить базу данных или почтовый сервер заглушками.

Три библиотеки

БиблиотекаЧто делает
JUnitНаходит и запускает тесты, даёт @Test и проверки assertEquals, assertThrows и другие
MockitoСоздаёт моки — поддельные объекты, которые подменяют базу, почтовый сервер или другой сервис
AssertJНеобязательная: читаемые цепочки проверок вида assertThat(list).hasSize(2)

JUnit — основа, две другие библиотеки подключаются к нему.

Версии

Курс использует JUnit 6.1 (6.1.3), Mockito 5.24 и AssertJ 3.27, Java 25 и Maven. По сравнению с JUnit 5 для автора тестов в шестой версии изменилось немного:

  • минимальная версия Java — 17;
  • у всех артефактов JUnit теперь один номер версии (раньше платформа была 1.x, а Jupiter — 5.x);
  • данные CSV для параметризованных тестов читает новый парсер;
  • удалены давно устаревшие API.

API тестов — org.junit.jupiter.api.Test, Assertions, @BeforeEach — тот же, что в JUnit 5. Имя Jupiter, которое встречается в пакетах, — название современной модели написания тестов в JUnit.

Что будем тестировать

В примерах два небольших набора обычных Java-классов, без веб-фреймворка:

  • PriceCalculator из магазина: сумма заказа и скидка, суммы в BigDecimal;
  • блог: запись Post, интерфейс PostRepository, сервис PostService, который создаёт и публикует посты и отправляет автору уведомление через Notifier.

Классы создаются в следующем уроке, тесты к ним растут от урока к уроку.

Виды тестов

ВидЧто проверяетСкорость
Модульный (unit)Один класс, всё остальное подмененоМиллисекунды
ИнтеграционныйНесколько частей вместе: сервис и настоящая базаСекунды
Сквозной (end-to-end)Всё приложение через его интерфейсМинуты

Курс посвящён модульным тестам: их должно быть больше всего, и именно для них сделаны JUnit и Mockito.

Частая ошибка

Старые статьи используют JUnit 4: import org.junit.Test и org.junit.Assert.assertEquals. В проекте на JUnit 6 такой тест не компилируется:

[ERROR] /.../src/test/java/com/example/shop/OldStyleTest.java:[3,17] cannot find symbol
  symbol:   class Test
  location: package org.junit

Используйте импорты из org.junit.jupiter.api — org.junit.jupiter.api.Test и org.junit.jupiter.api.Assertions. Тестовым классам и методам больше не нужен модификатор public.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.