Mock-тестирование

17 мая 2024
Дата публикации
Mock-тестирование
  • Тестирование ПО
  • Обеспечение качества
При написании тестов специалистам часто нужно взаимодействовать с внешними системами, такими как базы данных, веб-сервисы или сторонние API. Чтобы изолировать тестируемый код от этих зависимостей и создать надёжные и эффективные тесты, можно использовать моки.

Моки позволяют заменить реальные объекты на контролируемые имитации, чтобы создать предсказуемое и изолированное окружение для тестирования. Они помогают сократить время на разработку и тестирование, а также снизить риски при ведении бизнеса.

В статье мы определим характеристики и преимущества мока, остановимся на его инструментах и видах заглушек, а также рассмотрим пример использования моков при тестировании.

Что такое моки в тестировании

Мок (mock) — это техника в программировании, при которой создаются искусственные объекты или функции, которые имитируют реальные. Так можно тестировать код без зависимости от внешних ресурсов или компонентов, что делает проведение тестов более надёжным и предсказуемым.

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

Пример. Есть функция, которая отправляет запрос на сервер для получения данных. Мы можем использовать моки, чтобы имитировать ответ от сервера без фактического обращения к нему. Таким образом специалисты могут проверить, как функция обрабатывает данные без риска зависимости от статуса сервера.

В каких случаях можно использовать моки:

Изоляция зависимостей


В некоторых случаях QA-специалистам нужно изолировать тестируемый код от внешних зависимостей, таких как базы данных или сетевые запросы, ведь они могут замедлить или усложнить тестирование.


Негативное тестирование


С помощью мока тестировщики могут создавать сценарии с ошибками или недоступными реальными компонентами для проверки поведения системы.


Тестирование ещё не готовых компонентов


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


Тестирование воспроизводимых сценариев


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


Тестирование взаимодействия 


Моки проверяют правильное взаимодействие компонентов системы, даже если реальные компоненты еще не готовы или недоступны.


Тестирование кэширования и времени


Моки помогают при тестировании кэширования данных или временных зависимостей, позволяя контролировать время и последовательность вызовов.


Тестирование масштабируемости


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


Тестирование конфигураций


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

Виды заглушек

В тестировании ПО QA-специалисты используют различные виды заглушек, такие как стабы, моки, фейки и спайи. Ниже мы привели краткое описание каждого из них:
  1. Стабы (Stubs) — самые простые заглушки, которые возвращают заранее определённые значения на входные данные.
  2. Моки (Mocks) — более сложные заглушки, которые контролируют вызов методов, передачу аргументов и проверяют ожидаемое поведение тестируемого объекта.
  3. Фейки (Fakes) — упрощённые объекты, которые имитируют поведение реальных компонентов. Реализация у фейков упрощённая.
  4. Спайи (Spies) — объекты, которые записывают информацию о своём использовании. Это могут быть переданные аргументы и количество вызовов. Так тестировщики могут анализировать их поведение после выполнения тестов.

Инструменты для mock-тестирования

Сейчас мы рассмотрим основные инструменты, которые можно применять при mock-тестировании.

Postman используется для API-тестирования.


Преимущества:
  • Понятный интерфейс
  • Бесплатный
  • Моки можно скрыть
  • Удобно генерировать одноразовые моки
SwaggerHub помогает управлять API.


Преимущества:
  • Бесплатный
  • Можно скрыть моки
  • Моки могут выгружаться в готовый код
  • Мок генерируется по документации

CastleMock помогает работать с RESTful API и веб-сервисами SOAP.


Преимущества:
  • Бесплатный
  • Есть панель управления UI
  • Можно разделять права при работе
  • Применяется на проектах для создания моков SOAP, HTTP

Microcks используется для API Mocking


Преимущества:
  • Работает через api
  • Поддерживает плагины Github action и Jenkins

SoapUI помогает тестировать веб-сервисы


Преимущества:
  • Не нужна регистрация для работы
  • Многофункциональный
  • Мощная утилита
  • Можно создавать моки для REST/SOAP

Mockoon позволяет разрабатывать и запускать макеты REST API.


Преимущества:
  • Понятный интерфейс
  • Работает локально
  • Можно использовать с OpenApi
  • Понятная документация

Mountebank помогает при мокировании API.


Преимущества:
  • Бесплатный
  • Многофункциональный
  • Есть много доработок сторонними разработчиками

Wiremock позволяет создавать макеты API.


Преимущества:
  • Понятный интерфейс
  • Богатый функционал
  • Поддерживает разные форматы запуска
  • Хорошая документация

Преимущества и недостатки мок- тестирования

У мок-тестирования есть свои плюсы и минусы, которые мы рассмотрим ниже.

Преимущества использования моков в тестировании:

  1. Гибкость. Мокирование позволяет гибко настраивать поведение объектов для тестирования бизнес-проектов. QA-специалисты могут создавать тест-кейсы, которые покрывают различные варианты работы ПО.
  2. Изоляция. С помощью мока можно изолировать тестируемый компонент. Это помогает проводить тестирование отдельных модулей.
  3. Скорость. С моками обычно можно работать быстрее, чем с реальными объектами или сервисами. Благодаря этому можно быстрее выпустить ИТ-продукт на рынок.
  4. Предсказуемость. Использование моков позволяет создавать предсказуемые условия для тестирования. Задавая поведение моков, можно контролировать результаты тестов.
  5. Удобство. Моки можно легко создавать и настраивать с помощью специальных библиотек и инструментов, что делает процесс тестирования более удобным.
  6. Сокращение затрат на тестирование. Тестировщики могут создавать эффективные и быстрые тесты без необходимости поддерживать и настраивать реальные внешние системы. Благодаря этому компания может снизить затраты на проверку качества ПО.
  7. Поддержка параллельного и автоматизированного тестирования. Моки облегчают создание параллельных и автоматизированных тестов, потому что позволяют контролировать взаимодействие между компонентами системы и поведение имитируемых объектов.
  8. Повышение уровня тестового покрытия. Использование моков помогает увеличить уровень тестового покрытия кода, так как позволяет создавать тесты для различных сценариев и условий. Благодаря этому можно в большей степени проверить качество ПО.
  9. Упрощение исправления и анализа ошибок. Разработчики могут контролировать поведение имитируемых объектов и изучать взаимодействие между компонентами системы. Так им легче исправлять дефекты.

Недостатки использования моков в тестировании:

  1. Недостаточное отражение реальной системы. Моки имитируют объекты, они могут не полностью отражать реальное поведение системы. Иногда это приводит к недооценке ошибок в ПО.
  2. Может не найти непредсказуемые ошибки. Моки не всегда способны создавать все возможные сценарии работы системы.
  3. Дополнительная работа. Создание и поддержка моков может потребовать дополнительного времени и усилий со стороны разработчиков.
  4. Риск возникновения ошибок. Неправильно настроенные моки могут привести к ложным результатам и ошибкам в процессе разработки.
  5. Зависимость от библиотек. Чтобы создать моки, специалисты обычно используют специализированные библиотеки. Из-за этого они могут зависеть от конкретных инструментов, что усложнит процесс разработки.

Пример использования моков

Возьмём для примера приложение, которое отображает информацию о книгах из базы данных.

Процесса мок-тестирования может выглядеть так:
  • Создание мока.
Вместо использования реальной базы данных, тестировщики создают мок, который будет возвращать заранее определённые данные о книгах.

  • Тестирование страницы с книгами.
Специалисты запускают приложение, используя мок базы данных; проверяют, что страница корректно отображает список книг из мока.

  • Проверка функциональности.
Тестировщики могут проверить различные аспекты функциональности приложения и убедиться, что все книги из мока отображаются на странице.

Также можно убедиться, что при клике на книгу открывается подробная информация и работает сортировка списка книг.

  • Оценка реакции приложения.
QA-специалисты меняют данные в моке и проверяют, как приложение реагирует на эти изменения: для этого можно добавить новую книгу в мок и посмотреть как она отображается на странице.


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

Используя моки, специалисты могут сосредоточиться на тестировании конкретной функциональности, не беспокоясь о внешних зависимостях. Это помогает улучшить качество ПО и ускорить процесс разработки.

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