Простое определение заглушки, шпиона, подделки и макета в модульном тестировании - PullRequest
0 голосов
/ 01 сентября 2018

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

Заглушка - заглушки - это минимальные реализации интерфейсов или базовых классов

Шпион - шпион будет записывать, какие участники были вызваны

Подделка - более сложная, подделка может напоминать производственную реализацию

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

Однако я хотел бы упростить значение (если возможно) и задать несколько вопросов.

  1. Все вышеперечисленное относится только к функциям или они могут быть объектами или любым другим типом?
  2. Stub - Является ли Stubbing главным образом способом предоставления фиктивной информации вместо вызова реальной базы данных? Так, например, если у меня был вызов API, вместо того, чтобы фактически сделать вызов API, я просто вместо этого выполняю запрос GET к файлу JSON, который находится в моей папке tests , в которой есть некоторые фиктивные данные. и использовать это вместо вызова API?
  3. Spy - так это способ отслеживания того, что происходит с функцией, например. Значит, вы следуете, когда его зовут, куда его передают?
  4. Fake - Это, например, функция, которую вы создаете внутри тестового файла, чтобы имитировать реальную функцию или быть упрощенной версией реальной функции?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 августа 2019

Есть несколько попыток определения. Насколько мне известно, не существует полностью непротиворечивого определения, вероятно, из-за того, что фальшивые рамки определяют вещи немного по-другому. Мартин Фаулер перечисляет следующее (https://martinfowler.com/bliki/TestDouble.html):

  • Пустышки объекты передаются, но фактически никогда не используются. Обычно они просто используются для заполнения списков параметров.
  • Поддельные объекты на самом деле имеют рабочие реализации, но обычно используют некоторые ярлыки, которые делают их непригодными для производства (хорошим примером является InMemoryTestDatabase).
  • Заглушки обеспечивают постоянные ответы на вызовы, сделанные во время теста, обычно вообще не реагируя ни на что, кроме того, что запрограммировано для теста.
  • Шпионы - это заглушки, которые также записывают некоторую информацию в зависимости от того, как они были вызваны. Одной из форм этого может быть служба электронной почты, которая записывает, сколько сообщений было отправлено.
  • Mocks запрограммированы с ожиданиями, которые формируют спецификацию вызовов, которые они ожидают получить. Они могут выдать исключение, если они получают вызов, которого они не ожидают, и проверяются во время проверки, чтобы убедиться, что они получили все ожидаемые вызовы.

У Фаулера они есть на этой странице: http://xunitpatterns.com/Test%20Double.html, где вы можете прочитать о них более подробно.

0 голосов
/ 02 сентября 2018
  1. Нет, они применяются не только к функциям
  2. Да
  3. Вид, в большинстве случаев вы будете шпионить за объектом
  4. Да

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...