JUnit
— это библиотека для тестирования отдельных частей кода, в частности — методов.
Когда мы реализовали какой-то метод, нам всегда нужно его протестировать. Правильно? Потому что если мы запустим код где много непротестированных методов, то мы получим много ошибок, в которых разбираться будет очень сложно.
Или если мы уже запустили такой непроверенный код, то нам нужно как-то его чинить. Ошибки можно находить проходясь по методам кода тестами.
Можно задаться вопросом, зачем нужна библиотека JUNIT, если можно вывести результат работы какого-либо метода просто в main через консоль например?
Дело в том, что JUnit
делает процесс тестирования проще и добавляет доп. функциональность для доп. удобства тестирования.
Допустим у нас есть класс, в котором мы создали метод pow и теперь ходим его протестировать
Класс Clac:
Теперь нужно создать отдельный класс для тестирования методов этого класса Calc с помощью JUNIT.
Пример программы:
Для того чтобы скомпилировать файл с тестами нужно сначала скачать два файла – 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
Запускать нужно всегда с этим файлом иначе программа не запуститься.
Компилируем и запускаем:

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

Как видим, программа нам сообщает, что значение, которое вернул метод pow (вернул 16) не совпадает со значением, которое ожидал программист (ожидал 14), что значит что метод работает не правильно и программист должен идти его исправлять.
В метод assertEquals
можно передавать значения любого типа, он перегружен и его можно использовать с разными параметрами.
Например, можно передать третьим параметром в него число отклонения фактического значения вот так:
Assert.assertEquals(16, result, 2);
То есть если фактическое значение было например 15 или 14, то тестовый метод скажет, что всё ОК, так как 15 и 14 не заходят за приделы отклонения от числа 16 на 2. Заходят числа, которые больше 18 и меньше 14.
Также из полезных методов стоит упомянуть метод assertArrayEquals
. То же самое, что и assertEquals, но сравнивает два массива а не два значения.
Также есть assertTrue
, assertFalse
– проверяют вернул ли проверяемый метод truе, false соответственно.
Также есть еще несколько других методов, но они все очень простые, особого смысла демонстрировать их нет, можно почитать о них в документации.
Аннотации в JUnit тестах
Изучите основные аннотации JUnit: @Test, @Ignore, @Before, @After. Узнайте, как тестировать производительность методов и управлять выполнением тестов в Java.
Тестирование с Mockito
Mockito для тестирования Java-кода: mock и spy объекты, подмена зависимостей (stub), примеры тестирования методов с имитацией работы БД.
Логирование в Java с помощью log4j
Основы логирования в Java с log4j: запись ошибок в файл, настройка логгера и appender-ов, практические примеры для отладки приложений.