Вернуться к содержанию курса
Введение в Unit-тестирование
Материалы для самоподготовки
Основные материалы
- Курс на Learn
Дополнительные материалы
- Видео: JUnit - Java для тестировщиков
- Habr: Юнит-тестирование для чайников
- Habr: Пирамида тестов на практике
Практическая работа
Для выполнения данного задания вам понадобится работающий Калькулятор.
Вам необходимо:
- Добавить в
pom.xml
Junit4 или Junit5
с нужным скоупом.
- Покрыть код калькулятора тестами. Вам необходимо учесть не только позитивные сценарии, но и негативные. Сгруппируйте
их в отдельные тест сьюты.
- Протестируйте следующую функциональность:
- Суммирование, вычитание, деление, умножение. Используйте ParametrizedTest.
- Некорректные операции должны выбрасывать
IllegalArgumentException
(Например деление на 0).
- Невалидная входная строка должна генерировать соответствующие исключения (Пустая строка, недопустимые символы,
два оператора подряд).
- Используйте матчеры из библиотеки Hamcrest, чтобы
валидировать результаты в тестах
- Проверьте, что в вашей IDE присутствует плагин для проверки покрытия кода тестами. Если вы используете IntellijiIdea,
то он должен быть уже установлен с самого начала. Запустите тесты для калькулятора в режиме покрытия кода, убедитесь, что
вы покрытие составляет > 90% по всем параметрам. Если это не так, допишите тесты.
- Запустите тесты через мавен
mvn clean test
и через IDE. Какие отличия в этих подходах вы видите?
- Подключите Maven Surefire Report Plugin. С помощью
него сгенерируйте тест репорт и прикрепите этот отчет к вашему проекту.
- Запушьте все изменения в ветку
/feature/unit-tests
и сделайте Pull-request в master
.
Вопросы для самоконтроля
Unit Testing
- Как вы понимаете, что такое юнит тестирование?
- Опишите пирамиду тестов. Какое место в ней занимают юнит тесты?
- Какие библиотеки обычно используют для юнит тестирования java-программ?
- В какой директории принято писать юнит и интеграционные тесты?
- Как написать простейший тест?
- Как вы охарактеризуете классический юнит тест? Что означает аббривеатура F.I.R.S.T.?
- Как мы можем сравнить результат выполнения метода
sum(2, 2)
и ожидаемый результат 4
?
- Что делать, если перед всеми тестами нам нужно сделать какую-то инициализацию? Перед каждым тестом?
- Что такое матчеры? Какую библиотеку стоит подключать, если нам не хватает матчеров из Junit?
- Мы хотим простетировать метод
calcFactorial(num)
с различными числами. Как наиболее удобно и красиво это сделать?
- Мы тестируем метод
readFile(path)
. Как мы можем протестировать, что этот метод выбросит IOException
, если не найдет
файл?
- Мы тестируем метод
establishConnection(host)
. Как мы можем протестировать то, что метод выполняется меньше, чем за 1
секунду?
- Можем ли мы объединить тесты в логическую структуру и запускать их все вместе?
- В чем вы видите разницу между такими методологиями тестирования как BDD и TDD?
- Что такое покрытие тестами? Как его можно измерить?
- Написав юнит тесты на новую фичу, мы увидели, что покрытие составляет
100%
. Можем ли мы быть уверены что багов нет?