Новая фича для приложения готова. Переходим к тестированию кода на предмет возможных ошибок из-за нового функционала. Тестировать весь код необязательно, можно работать только с частью благодаря модульному тестированию или unit тесту.
Unit тесты: возможности и особенности
Каждая функция и любой компонент программы — отдельный модуль, юнит. Это может быть кнопка бронирования билетов, формула расчета ипотеки или скрипт для генерации имени PDF-файла. Проверить правильность написания такого модуля можно unit тестом. Он покажет корректность работы блока без влияния на него других модулей.
Почему выбирают unit тесты?
- Не нужно привлекать тестировщиков. Поскольку тестируется изолированная часть программы без взаимосвязей и интеграции, программист сам запустит проверку после написания кода.
- Простота выполнения. Unit тесты не предполагают сложных вычислений и не требуют комплексной инфраструктуры.
- Высокая скорость реализации и, соответственно, низкая стоимость. На проверку небольшой функции уходит всего несколько секунд. Изолированность юнитов позволяет проверять работоспособность нескольких модулей одновременно.
- Простота автоматизации. Unit тест исследует ответ кода на ввод данных и определенные действия. Он не требует проиграть сценарий взаимодействия конечного пользователя с новой функцией, поэтому автоматизация процесса не отнимает много сил и времени.
Когда нужны unit тесты?
Модульным тестированием лучше не пренебрегать. На более поздних этапах при проведении сложных интеграционных и сквозных тестов можно выявить точечные баги, обнаружить которые может unit тестирование. Но времени на выявление проблемного места в коде будет потрачено намного больше.
Unit тесты обязательно нужны, если вы разрабатываете приложения со сложной бизнес-логикой или применяете ее в модулях. Иногда же такое тестирование необязательно. Например:
- Вы разрабатываете сайт-визитку с одной формой отправки заявки. Даже если сайт состоит из нескольких статических страниц, вряд ли он имеет сложную логику бизнес-процессов, которую можно сломать.
- Вы создаете рекламный сайт или баннеры То есть работаете с анимацией, сложной версткой и статикой. В этом случае фокус на представлении информации, а не логике бизнес-процессов.
- Вы делаете MVP с приблизительным результатом в короткие сроки для работы на выставке в течение двух дней. В таком случае достаточно базового функционала: тесты только усложнят и затянут разработку.
Как провести модульное тестирование?
Модульное тестирование кода обычно проводят программисты. Процесс включает несколько этапов:
- Написание кода юнита.
- Проверка изолированности модуля. Если он связан с другими функциями, то модуль переписывают для устранения этой связи.
- Создание реакции других модулей с помощью моков – имитаторов. Они передадут данные для получения реакции тестируемого юнита.
- Написание тестов и исправление ошибок.
- Запуск unit тестов для проверки полноты покрытия тестирования строк функции.
Протестированный по этой логике код можно получить уже за пару итераций.
Инструменты для модульного тестирования
Unit тесты не обязательно писать с нуля. Для большинства языков программирования есть фреймворки с готовыми решениями. Для Python можно выбрать Pytest или Unittest, для Javascript – Jest.
Как максимально покрыть код unit тестами?
На больших и сложных проектах стопроцентного покрытия кода тестами достичь сложно. К тому же, это нерационально. Показатель 70–90% считается хорошим. Он позволяет выявить максимальное количество ошибок. Мы собрали несколько практических советов по увеличению процента покрытия кода:
- Пишите unit тест на каждый новый код сразу же.
- Используйте готовые решения – тестовые фреймворки.
- Создавайте тесты для проверки только одной функции.
- Используйте негативные тесты для проверки поведения программы в случае ввода неправильных данных.
- Используйте мутационные фреймворки с функцией изменения констант и условий для проверки качества unit тестов.
- Проверяйте тесты на стабильность.
- Следите за скоростью выполнения теста.
Детально изучить юнит-тестирование с использованием специального фреймворка вы можете на курсе «Тестирование с Pytest». Еще в рамках курса можно прокачать навык функционального тестирования. На изучение понадобится всего около 13 часов.