Когда тестов и файлов с тестами становится много, возникают новые вопросы. Как группировать тесты? Как запустить на выполнение все тесты из одной директории? Если их очень много и они долгие, можно ли запустить их параллельно?
Для решения этих вопросов используют специальные тестовые фреймворки. Они помогают организовать структуру тестов и дают много полезного, например, удобный вывод. С большинством из этих возможностей мы познакомимся далее по курсу. В 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
и, если хотя бы в одном из них тесты не пройдут, то выполнение завершится с ошибкой.
Самостоятельная работа
- Выполните все шаги из этого урока
- Залейте код на Гитхаб
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.