Подключаем фреймворк JUnit
Для тестирования Java-кода у нас есть шикарный фреймворк под названием JUnit. Он отлично работает, постоянно обновляется, очень популярен и, конечно, с ним очень плотно интегрирована Intellij IDEA.
Сейчас все пользуются пятой версией этого фреймворка — JUnit 5, хотя во многих проектах ты еще можешь встретить его четвертую версию. Они не сильно отличаются, но мы все равно рассмотрим самую последнюю. Думаю, к тому времени, когда ты начнешь активно писать тесты, ты одобришь мой выбор.
Итак, как добавить в проект JUnit? После изучения Maven это будет просто: просто добавь этот код в свой pom.xml:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
Кстати, если ты хочешь, чтобы Maven на этапе сборки (test stage) запустил твои тесты, то в pom.xml нужно добавить еще один фрагмент:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
Аннотация @Test
Допустим, у тебя есть класс, который ты хочешь протестировать. Как это лучше всего сделать? Давай начнем с какого-нибудь примера, а то сложно тестировать абстрактный класс :)
Предположим, у нас есть класс Calculator, которые умеет выполнять 4 базовые операции: сложение, вычитание, умножение и деление. Напишем его:
class Calculator {
public int add(int a, int b) {
return a+b;
}
public int sub(int a, int b) {
return a-b;
}
public int mul (int a, int b) {
return a*b;
}
public int div(int a, int b) {
return a/b;
}
}
Мы хотим протестировать методы этого класса. Мало ли, в будущем наменяют чего-нибудь и все перестанет работать. Как нам написать для него тесты?
Нам нужно создать еще один класс. Для этого обычно берут то же имя и добавляют суффикс Test. Для каждого метода нужно добавить хотя бы один тестовый метод. Пример:
class CalculatorTest {
@Test
public void add() {
}
@Test
public void sub() {
}
@Test
public void mul() {
}
@Test
public void div() {
}
}
Раньше существовало требование, чтобы имя метода начиналось со слова test, но теперь это не нужно.
Примеры тестов JUnit
Давай напишем несколько примеров, в которых протестируем методы нашего класса CalculatorTest :
class CalculatorTest {
@Test
public void add() {
Calculator calc = new Calculator();
int result = calc.add(2, 3);
assertEquals(5, result);
}
@Test
public void sub() {
Calculator calc = new Calculator();
int result = calc.sub(10, 10);
assertEquals(0, result);
}
@Test
public void mul() {
Calculator calc = new Calculator();
int result = calc.mul(-5, -3);
assertEquals(15, result);
}
@Test
public void div() {
Calculator calc = new Calculator();
int result = calc.div(2, 3);
assertEquals(0, result);
}
}
Вот так выглядит типичный тест с использованием JUnit. Из интересного: тут используется специальный метод assertEquals(): он сравнивает переданные ему параметры, о чем говорит слово equals в его названии.
Если параметры, переданные в assertEquals(), неравны, то метод кинет исключение и тест будет считаться проваленным. Это исключение не помешает выполнению остальных тестов.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ