Общие сведения о Unit-тестах
Unit-тесты (модульные тесты) – это специальным образом составленные программные коды, предназначенные для тестирования отдельных модулей исходного кода приложения, в процессе которого проверяется правильность их работы.
Такие тесты имеет смысл создавать для каждой объёмной функции или метода, а также для отдельных классов, особенно, если их очень много. В дальнейшем это позволит достаточно быстро реагировать на любые изменения кода, так как новые добавления в коде можно будет сразу же легко проверить на наличие ошибок и тут же устранить их в случае возникновения.
Среди всего разнообразия возможных в программировании тестов для каждого проекта, как правило, должно быть больше всего выполнено именно модульных тестов. Они наиболее оптимальные, поскольку задействуют немного ресурсов, связанных со временем и оперативной памятью компьютера, и, кроме того, позволяют раздельно протестировать маленькие фрагменты кода.
Применяемые на разных уровнях приложения unit-тесты обычно создаются таким образом, чтобы они были изолированы от внешней логики программы, оставляя все остальные её части работающими в стандартном режиме во время тестирования отдельных модулей.
Итак, unit-тестирование позволяет повысить качество написанного кода, а также сделать процесс разработки приложений более гибким и надёжным.
Основные понятия, связанные с unit-тестированием
Основные понятия, связанные с unit-тестированием:
- Code Coverage – покрытие тестов, определяющее наиболее важную оценку качества тестирования проекта. При создании документации обычно указывается процент кода, покрытого тестами.
- Test-driven development (TDD) –разработка через тестирование, то есть сначала пишется тест, а лишь затем сам код под этот тест. Такой подход позволяет сделать код более простым и понятным, поскольку в тесте уже заранее определяется и проверяется, что будет выполнять будущий код программы, который в результате получится сразу же безошибочным.
- Behavior-driven development (BDD) – это разработка через поведение. Данный подход основан на TDD и заключается в ориентировании на примеры поведения системы при разработке программного продукта.
- Test Case (Тестовый сценарий) – сценарий, пошагово задающий конкретные условия и параметры, которые потребуются для проверки кода на каждом этапе его выполнения.
- Fixture (Фикстуры) – это состояние среды тестирования, при котором должен успешно пройти проверку испытуемый метод, то есть это заранее известный набор объектов с описанием их поведения в определённых условиях.
Этапы unit-тестирования
Unit-тест предполагает прохождение следующих этапов:
- Определение данных, которые будут тестироваться (задание фикстур).
- Вызов проверяемого метода (его применение в действии в реальных условиях).
- Проверка полученных результатов (их сопоставление с предполагаемыми ожиданиями).
Для того чтобы тест был направлен на проверку какого-то определённого модуля из общего кода программы, нужно отделить его от других слоёв приложения. Это можно сделать при помощи таких специальных объектов, как моки (mocks), заглушки (stubs) и шпионы (spies).
Рассмотрим подробнее, для чего они используются.
Моки – это определённым образом настроенные объекты, которые проверяются в каждом очередном тесте на совпадение с ожидаемыми результатами.
Стабы – это то, что обеспечивает чёткий заранее заданный ответ, который должен получиться в результате вызова метода в процессе тестирования. Если они вдобавок к этому ещё и сохраняют в себе некие сведения о своём вызове (какие-либо параметры, например, общее количество вызовов), то такие стабы имеют специальное название – шпионы.
Их главное отличие состоит в том, что моки используются для проверки различных взаимодействий в программе (они связаны с какими-то ожиданиями), а стабы – при тестировании отдельного состояния проекта (они имитируют определённое состояние, ничего не сверяя). При этом рекомендуется использовать не более одного мока на тест, чтобы не нарушить эффективные принципы unit-тестирования. А вот стабов в одном тесте может быть и много, в зависимости от того, сколько их потребуется, так как они не способны испортить сам тест.