Перейти к содержанию

Тестирование

Зачем и почему?

В проекте используются юнит-тесты и функциональные тесты.

Как польза, так и вред от них могут быть не самыми очевидными.

Вред:

  • Тесты замедляют время на написание кода — для изменения сервиса нужно поддерживать изменение тестов;
  • Тесты замедляют развёртывание сервиса — тесты запускаются на каждый merge request и если хотя бы один тест не проходит, то весь тестовый билд ломается и не позволяет выполнить слияние мерж-реквеста;
  • Поддержание и актуализация тестов также требует времени — на это нужно закладывать соответствующее время при оценке задач.

Польза:

  • Табличные юнит-тесты позволяют проверить бизнес-логику конкретного файла или пакета в момент его создания, это позволяет сразу же проверить несколько гипотез и краевых случаев (corner cases) до появления кода в мерж-реквесте;
  • Юнит-тесты помогают понять возможна ли сборка пакета, к которому они относятся (если код не компилируется, то это выяснится при запуске тестов);
  • Функциональные (или API-тесты) также помогают убедиться, что поведение сервиса соответствует ожидаемому, потому что позволяют проверить состояние данных в базе, запросы к внешним сервисам и прочие детали поведения;
  • API-тесты также помогают убедиться, что API-сервиса работоспособно и все необходимые для этого пакеты компилируются;
  • Пожалуй, самое важное преимущество тестов — при внесении значительных изменений в проект или при рефакторинге, тесты позволяют убедиться, что новая версия кодовой базы продолжает соответствовать старым ожиданиям.

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