Тестирование в 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
Сравнение JUnit с другими фреймворками
Практические примеры тестирования
Следующие уроки
Аннотации в JUnit тестах
18
мин.
Тестирование с Mockito
20
мин.
Логирование в Java с помощью log4j
14
мин.