Топ-100Тестирование в Java с помощью JUnit - CodOrbits
LogoCodOrbits

Раздел: Тестирование

Раздел расскажет о тестировании Java-приложений: юнит-тесты, JUnit, Mockito и многое другое.

Все разделы
Иконка Тестирование

Тестирование в Java с помощью JUnit

Last updated: 9 мая 2025 г.

JUnitэто библиотека для тестирования отдельных частей кода, в частности — методов.

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

Или если мы уже запустили такой непроверенный код, то нам нужно как-то его чинить. Ошибки можно находить проходясь по методам кода тестами.

Можно задаться вопросом, зачем нужна библиотека JUNIT, если можно вывести результат работы какого-либо метода просто в main через консоль например?

Дело в том, что JUnit делает процесс тестирования проще и добавляет доп. функциональность для доп. удобства тестирования.

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

Класс Clac:

1public class Calc {
2    //Функция возведения в степень
3    public int pow(int num, int power){
4        int result=1;
5        for(int i=0; i < power; i++) {result *= num;}
6        return result;
7    }
8}

Теперь нужно создать отдельный класс для тестирования методов этого класса Calc с помощью JUNIT.

Пример программы:

1import org.junit.Assert;
2import org.junit.Test;
3
4//Названия классов тестеров принято называть
5//начиная Test и заканчивая именем класса, который
6//тестируем то есть в данном случае класса Calc.
7public class TestCalc {
8    @Test
9    //Помечаем что это метод для теста.
10    //Функция для проверки метода возведения в степень.
11    //имя метода тестера тоже = test потом имя метода,
12    //который тестируем.
13    public void testPow() throws Exception{
14        Calc calc = new Calc();
15        int result = calc.pow(2, 4);
16        //Метод assertEquals сообщает совпадает ли
17        //значение, которое вернул метод pow
18        //со значением, которое ожидает программист.
19        //Слева значение, которое ожидаем,
20        //справа фактическое.
21        Assert.assertEquals(16, result);
22    }
23}

Для того чтобы скомпилировать файл с тестами нужно сначала скачать два файлаhamcrest-core-1.3.jar и junit-4.13.2.jar. Оба довольно легко можно найти в интернете.

В консоли компилируем файл с тестами с использованием скачанных файлов:

javac -cp .;hamcrest-core-1.3.jar;junit-4.13.2.jar TestCalc.java.

И потом запускаем этот файл вместе с файлом JUnitCore, который находиться в этих библиотеках:

java -cp .;hamcrest-core-1.3.jar;junit-4.13.2.jar org.junit.runner.JUnitCore TestCalc

Запускать нужно всегда с этим файлом иначе программа не запуститься.

Компилируем и запускаем:

Программа сообщает нам, что всё ОК. То есть ожидаемое значение совпадает с фактическим. Значит метод работает корректно.

Теперь давайте изменим ожидаемое значение и посмотрим, что будет.

Пример программы:

1import org.junit.Assert;
2import org.junit.Test;
3
4//Названия классов тестеров принято называть
5//начиная Test и заканчивая именем класса, который
6//тестируем то есть в данном случае класса Calc.
7public class TestCalc {
8    @Test //Помечаем что это метод для теста.
9    //Функция для проверки метода возведения в степень.
10    //имя метода тестера тоже – test потом имя метода,
11    //который тестируем.
12    public void testPow() throws Exception{
13        Calc calc = new Calc();
14        int result = calc.pow(2, 4);
15        //Метод assertEquals сообщает совпадает ли
16        //значение, которое вернул метод pow
17        //со значением, которое ожидает программист.
18        //Слева значение, которое ожидаем,
19        //справа фактическое.
20        Assert.assertEquals(14, result);
21    }
22}

Компилируем и запускаем.

Как видим, программа нам сообщает, что значение, которое вернул метод pow (вернул 16) не совпадает со значением, которое ожидал программист (ожидал 14), что значит что метод работает не правильно и программист должен идти его исправлять.

В метод assertEquals можно передавать значения любого типа, он перегружен и его можно использовать с разными параметрами.

Например, можно передать третьим параметром в него число отклонения фактического значения вот так:

Assert.assertEquals(16, result, 2);

То есть если фактическое значение было например 15 или 14, то тестовый метод скажет, что всё ОК, так как 15 и 14 не заходят за приделы отклонения от числа 16 на 2. Заходят числа, которые больше 18 и меньше 14.

Также из полезных методов стоит упомянуть метод assertArrayEquals. То же самое, что и assertEquals, но сравнивает два массива а не два значения.

Также есть assertTrue, assertFalse – проверяют вернул ли проверяемый метод truе, false соответственно.

Также есть еще несколько других методов, но они все очень простые, особого смысла демонстрировать их нет, можно почитать о них в документации.


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

Официальная документация JUnit 5

Additional Material Icon
Divider

Сравнение JUnit с другими фреймворками

Additional Material Icon
Divider

Практические примеры тестирования

Additional Material Icon

Следующие уроки

Аннотации в JUnit тестах

18
мин.

Similar Articles Icon
Divider

Тестирование с Mockito

20
мин.

Similar Articles Icon
Divider

Логирование в Java с помощью log4j

14
мин.

Similar Articles Icon