Заглушки / издевательства против виртуализации сервисов..? Хлоп
В настоящее время я изучаю модульное тестирование в труднодоступных местах (я знаю, что это очень высокоуровневое представление), и я столкнулся с таким вопросом: заглушки / насмешки или виртуализация сервисов?
Я читаю в поисках ответа, но, похоже, единственные ресурсы, которые я могу найти, поступают от поставщиков SV (которые явно предвзяты).
Кто-нибудь может вспомнить примеры, когда одно абсолютно уместнее другого и почему? Если ответ "это зависит", то, пожалуйста, предложите почему / что на. Похоже, что те же результаты могут быть достигнуты в любом случае - это вопрос времени (для разработки) или доступных средств (GreenHat и т. Д. Не дешево!).
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Проверив одну из ссылок (1), размещенных ниже, я думаю, что это то, что я получаю:
"Виртуальные сервисы - это просто тестовые заглушки, которые вы можете сделать сами.
Несмотря на то, что вы можете кодировать свои собственные заглушки, как только вы преодолеете очень упрощенное поведение, усилия и затраты на макетирование всех систем, от которых вы зависите на протяжении всего жизненного цикла разработки программного обеспечения, станут огромными. Виртуализация услуг требует автоматизации в том смысле, что моделирование и моделирование могут проводиться прямым наблюдением со стороны программного обеспечения, а не ручным кодированием и настройкой. В противном случае вы можете тратить столько же времени на поддержку сред заглушек, сколько вы создаете и тестируете сами функции приложения ".
То же, что и любой другой инструмент, а?
4 ответа
Отличный вопрос По сути, заглушки отключают набор тестов от среды, а виртуализация сервисов эмулирует среду, чтобы лучше реализовать истинные цели теста.
Более подробно...
Заглушки предоставляют заменяющие реализации для объектов, методов или функций для удаления внешних зависимостей. Заглушки, как правило, используются во время модульного и компонентного тестирования для двух основных целей: 1) для изоляции тестируемого кода от интегрированной среды. 2) для обеспечения возможности продолжения тестирования, когда невозможно получить доступ к внешнему ресурсу или проблемному методу / функции / объекту.,
Если вы пытаетесь написать модульный тест и вам нужно заменить простой вызов базы данных, внешних библиотек (например, файлового ввода-вывода) или другого системного API, заглушка может идеально подходить для ваших нужд.
В то время как заглушки / макеты обычно используются для "пропуска" недоступных системных компонентов, виртуализация сервисов позволяет членам команды эмулировать среды (или определенные компоненты) и делать их поведение доступным для всей команды. Например, виртуализация службы может использоваться для эмуляции поведения зависимого компонента (такого как сторонняя служба, база данных, мэйнфрейм, упакованное приложение и т. Д.), Который развивается, еще не доступен или труднодоступен / настраивается для тестирование.
Виртуализация сервисов может представлять гораздо более реалистичное поведение, чем простые заглушки и макеты. Если вы можете получить доступ к зависимому приложению, вы можете зафиксировать его текущее поведение в "виртуальном активе" путем записи из действующей системы. Кроме того, вы можете моделировать виртуальные активы, которые представляют ожидаемое поведение. Затем вы можете настроить этот виртуальный ресурс, задав параметры его условного поведения, критериев производительности и тестовых данных. Кроме того, вы можете легко модифицировать виртуальный актив для создания соответствующего ассортимента состояний отказа, исключений и т. Д., Которые следует использовать для проверки всего диапазона поведения системы.
Parasoft, компания, в которой я работаю, рассматривает оба этих варианта использования. Наша платформа тестирования разработки облегчает генерацию заглушек и управление ими для модульного тестирования, а наш отмеченный Jolt продукт Parasoft Virtualize предлагает виртуализацию услуг. См. http://www.parasoft.com/service-virtualization и http://www.parasoft.com/development-testing для получения подробной информации.
ИМО, модульные тесты не должны зависеть от внешних сервисов, включая сервис виртуализации.
Вам нужно будет связать эти зависимости только с внешними сервисами при написании интеграционных тестов, функциональных тестов, сквозных тестов.
Хотя все эти типы могут быть написаны или управляться в тестовых средах, таких как JUnit, они представляют собой разные типы тестов.
Вот статья InfoQ, в которой изложены различия: различия в заглушке, насмешках и виртуализации сервисов для групп тестирования и разработки
Из статьи:
Stub: минимальная реализация интерфейса, который обычно возвращает жестко закодированные данные, которые тесно связаны с набором тестов. Это наиболее полезно, когда набор тестов прост, а сохранение закодированных данных в заглушке не является проблемой. Некоторые окурки написаны от руки; некоторые могут быть сгенерированы инструментами. Заглушка обычно написана разработчиком для личного использования. Он может использоваться совместно с тестировщиками, но более широкое совместное использование обычно ограничивается проблемами взаимодействия, связанными с жестко заданными зависимостями программной платформы и инфраструктуры развертывания. Обычная практика - это когда заглушка работает в процессе непосредственно с классами, методами и функциями для модульного, модульного и приемочного тестирования. Некоторые разработчики скажут, что заглушку также можно заполнить, но вы не можете проверить вызов заглушки. Заглушки также могут связываться "по проводам", например, HTTP, но некоторые утверждают, что в этом случае их следует называть виртуальными службами.
Макет: программируемый интерфейсный наблюдатель, который проверяет результаты в соответствии с ожиданиями, определенными тестом. Он часто создается с использованием сторонней библиотеки, например, в Java, которая является Mockito, JMock или WireMock. Это наиболее полезно, когда у вас большой набор тестов, и заглушки будет недостаточно, поскольку для каждого теста требуются разные данные, а их поддержка в заглушке будет дорогостоящей. Макет позволяет нам сохранить настройки данных в тесте. Макет обычно пишется разработчиком для личного использования, но им можно поделиться с тестировщиками. Однако более широкий обмен данными обычно ограничен проблемами совместимости, связанными с жестко заданными зависимостями программной платформы и инфраструктуры развертывания. Чаще всего они работают непосредственно с классами, методами и функциями для модульного, модульного и приемочного тестирования. Макет предоставляет ответы на основе заданного запроса, удовлетворяющего предопределенным критериям (также называемого запросом или сопоставлением параметров). Макет также фокусируется на взаимодействиях, а не на состоянии, поэтому в макетах обычно указывается состояние. Например, вы можете проверить, сколько раз был вызван данный метод или порядок вызовов, сделанных для данного объекта.
Виртуальный сервис: тестовый двойник, часто предоставляемый как программное обеспечение как услуга (SaaS), всегда вызывается удаленно и никогда не работает в процессе напрямую с методами или функциями. Виртуальный сервис часто создается путем записи трафика с использованием одной из платформ виртуализации сервисов вместо создания шаблона взаимодействия с нуля на основе интерфейса или документации API. Виртуальный сервис может использоваться для установления общих позиций для групп, чтобы общаться и облегчать обмен артефактами с другими командами разработчиков, а также группами тестирования. Виртуальный сервис, вызываемый удаленно (через HTTP, TCP и т. Д.), Обычно поддерживает несколько протоколов (например, HTTP, MQ, TCP и т. Д.), Тогда как заглушка или макет обычно поддерживают только один. Иногда виртуальным службам требуется авторизация пользователей, особенно при развертывании в средах с видимостью в масштабах предприятия. Инструменты виртуализации сервисов, используемые для создания виртуальных сервисов, чаще всего имеют пользовательские интерфейсы, которые позволяют тестерам программного обеспечения с минимальными техническими навыками начать работу, прежде чем углубляться в детали работы конкретных протоколов. Они иногда поддерживаются базой данных. Они также могут имитировать нефункциональные характеристики систем, такие как время отклика или медленные соединения. Иногда вы можете найти виртуальные сервисы, которые предоставляют набор заглушенных ответов для заданных критериев запроса и передают каждый второй запрос в оперативную бэкэнд-систему (частичная заглушка). Подобно имитациям, виртуальные сервисы могут иметь довольно сложные средства сопоставления запросов, которые позволяют возвращать один ответ для множества различных типов запросов. Иногда виртуальные сервисы имитируют поведение системы, создавая части ответа на основе атрибутов запроса и данных.
Часто трудно точно определить, к какой из следующих категорий относится тестовый двойник. Они должны рассматриваться как спектры, а не как строгие определения.
Мы имели в виду, что SV может представлять поведение более реалистично, чем заглушки. Виртуализация сервисов не должна работать как хранилище; они могут представлять сложное поведение. Например, вызов для перевода средств в одной виртуальной конечной точке может вызвать обновление баланса счета в другой. Это позволяет виртуальным активам вести себя с учетом состояния и позволяет легко моделировать поведение всей системы, даже если поведение пересекает несколько соединений, протоколов или интерфейсов.