Короче говоря: юнит-тесты

Глава первая, мотивационно-теоритечаская

Ilya Lebedev
2 min readSep 16, 2019

Итак, у вас есть код, которые что-то делает и вы хотите проверить правильно ли он работает. Есть несколько способов это сделать.

Можно, например, проверить с помощью конечных пользователей: просто выкатить код, запустить его и посмотреть что получится. Можно использовать для этого тестировщика: он запустит код руками, потыкает в результат его работы, постарается сломать и скорее всего найдёт основные ошибки. Ещё можно сделать этот процесс автоматизированным, без участия человека. Это можно сделать по-разному.

Можно поднять всю инфраструктуру, заполнить базу данных тестовыми пользователями и написать скрипт, которые будет проверять, что в браузере видно то, что должно быть видно. Такие тесты показывают, что функциональность точно работает, но сломаться такие тесты могут по многим причинам. Например, код работает правильно, но на сервере закончилось место. В этом и преимущество и проблема таких тестов: они слишком общие, при поломке не всегда понятно, куда смотреть и что делать.

Можно взять небольшой кусочек кода и постараться написать такой тест, который будет проходить, если код работает верно и ломаться только, если в коде есть ошибка. Нам ведь для этого и нужны тесты. Такие тесты называют юнит-тестами (потому что они тестируют небольшой юнит кода), а в Гугле их называют маленькими тестами (потому что один такое тест тестирует маленькое количество кода). Давайте поговорим о них немного подробнее.

Раз этот тест не должен ломаться, если функция работает верно, значит, он не должен ломаться, если, например, не работает интернет. Выходит, при выполнении юнит-тестов не должны использоваться сетевые запросы. И запросы в базе данных. И внешние сервисы. И в консоль не должно ничего выводиться (вдруг у вас неверное настроена кодировка и при выводе в консоль тест сломается, хотя тестируемая функция работает верно).

А ещё сам тест должен быть маленький, чтобы если он сломался сразу было понятно, что именно отломилось и куда смотреть для починки. Это же нужно для поддержки базы тестов.

Если вы знакомы с понятием чистых функций, то вы уже могли подумать о том, как легко их тестировать. Они ведь по определению никак не взаимодействуют с внешним миром, не ходят в сеть, не используют внешних интеграций, даже глобальных переменных не используют. Поэтому для таких функций очень легко писать юнит-тесты: вызвал функцию с одними аргументами, проверил возвращаемое значение, готово.

Глава вторая, практическая

Начинать знакомство с юниттестами лучше всего с модуля unittest : он в стандартной библиотеке и позволяет довольно быстро начать писать тесты. Вот несколько туториалов:

А вот пара примеров проектов с тестами и практических советов:

--

--

No responses yet