Зарегистрируйтесь, чтобы продолжить обучение

JUnit Java: Автоматическое тестирование

Когда тестов и файлов с тестами становится много, возникают новые вопросы. Как группировать тесты? Как запустить на выполнение все тесты из одной директории? Если их очень много и они долгие, можно ли запустить их параллельно?

Для решения этих вопросов используют специальные тестовые фреймворки. Они помогают организовать структуру тестов и дают много полезного, например, удобный вывод. С большинством из этих возможностей мы познакомимся далее по курсу. В Java мире наиболее популярен фреймворк JUnit. К слову, с помощью него мы тестируем все ваши решения на этом курсе.

А что с AssertJ?

AssertJ - отличная библиотека для тестов, но это именно библиотека. Она предоставляет большое количество классов и методов, с помощью которых вы можете делать проверки. Однако точкой входа в вашу программу и тесты останется всё тот же метод main(). То есть тестирование с AssertJ, в общем случае, становится неотъемлемой и неотделимой частью программы. Это просто методы, которые вызываются по ходу выполнения программы.

JUnit - это уже фреймворк. Он обладает своей собственной точкой входа (классом/методом, с которого начинается выполнение тестов), что делает его фактически второй программой, которая живёт отдельно от вашего основного кода. Это позволяет, в частности, не включать тесты в итоговую сборку проекта. Кроме того, JUnit обладает целым рядом дополнительных преимуществ, например:

  • параллельный запуск тестов
  • подготовка данных
  • создание динамических тестов
  • и многое, многое другое

Подключение

JUnit интегрирован в процесс создания проекта на Gradle. Во время инициализации проекта, Gradle попросит выбрать тестовый фреймворк:

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter # Нужно выбрать этот вариант. Это JUnit 5
Enter selection (default: JUnit Jupiter) [1..4]

Полный процесс инициализации Gradle-проекта описан тут. В результате получится такая структура.

Теперь можно создавать классы и тестировать их. Создадим класс SomeClass со статическим методом sum(), который находит сумму двух чисел:

class SomeClass {
    public static int sum(int a, int b) {
        return a + b;
    }
}

Класс SomeClassTest.java с тестами для метода sum будет выглядеть следующим образом:

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class SomeClassTest {

    @Test
    public void testSum() {
        var expected = 5;
        var actual = SomeClass.sum(3, 2);
        assertEquals(expected, actual);
    }
}

Аннотация @Test "показывает" фреймворку, что этот метод является тестом, а класс Assertions является основным для большинства тестовых методов.

Этого достаточно, чтобы создать простейший Gradle-проект с JUnit5 в качестве тестового фреймворка. Создайте подобный проект на своём компьютере и наберите ./gradlew test в терминале для запуска тестов. JUnit5 сам найдёт все методы помеченные аннотацией @Test и, если хотя бы в одном из них тесты не пройдут, то выполнение завершится с ошибкой.


Самостоятельная работа

  1. Выполните все шаги из этого урока
  2. Залейте код на Гитхаб

Дополнительные материалы

  1. Документация JUnit5

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»