Что такое «заглушка»?

117

Итак, продолжая выполнять свое новогоднее намерение получить больше от TDD, теперь я начинаю больше работать с Rhino Mocks .

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

Что такое «заглушка»?

Роб Купер
источник
6
сначала вы задаете вопрос, а потом даете ответ?
empi
17
Как указано в вопросе - я ищу подтверждение правильности моего понимания, я хотел, чтобы здесь был ответ (будь он моим или нет), чтобы предоставить ресурс по этому часто задаваемому, но редко получаемому ответу вопросу: )
Роб Купер,
42
Также ответ на собственный вопрос указан в FAQ как допустимый способ использования сайта - фактически, его следует поощрять.
Эрик Форбс,
Ответить на свои собственные вопросы - это нормально, хотя сам вопрос слишком шумный (автобиография) и не показывает никаких усилий, чтобы найти ответ, и никакой склонности к тому, что человек сделал, чтобы попытаться найти ответ.
eric

Ответы:

113

Мартин Фаулер написал прекрасную статью на эту тему. Из этой статьи:

Месарос использует термин Test Double как общий термин для любого типа воображаемого объекта, используемого вместо реального объекта в целях тестирования. Название происходит от понятия дублера в фильмах. (Одна из его целей состояла в том, чтобы избежать использования любого имени, которое уже широко использовалось.) Затем Месарос определил четыре конкретных вида двойника:

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

Проще говоря: имитирующие объекты «ожидают» вызова определенных методов и обычно приводят к сбою модульного теста, если их ожидания не оправдываются. Объекты-заглушки предоставляют стандартные ответы (и могут быть автоматически сгенерированы вспомогательными библиотеками), но, как правило, напрямую не вызывают сбой модульного теста. Обычно они используются только для того, чтобы тестируемый объект получал данные, необходимые для выполнения своей работы.

Росс
источник
2
Тогда в чем разница между фальшивыми предметами и сутбами? Как вы сказали, у них должна быть одна и та же роль, не так ли?
LKM
4
@LKM поддельный объект - это реальный объект, который реализует реальную функциональность и выполняет определенные действия. Заглушки - это просто «заготовленные ответы», например. жестко запрограммированные результаты JSON, имитирующие то, что будет возвращено с веб-сервера.
user3344977
31

«Заглушка» - это реализация интерфейса, который существует для предоставления данных / ответа определенного вида. Например:

  • DataSet
  • список пользователей
  • XML-файл

Обычно это предоставляется другой службой (будь то веб-служба, другое приложение, база данных), но для того, чтобы улучшить тестируемость кода, результаты «подделывают».

Основным преимуществом этого является то, что он позволяет делать утверждения в модульных тестах на основе ожидаемых данных. Если ошибки возникают из-за ошибок данных, тогда можно легко добавить тесты, создать новую заглушку (реплицирующую ошибку данных) и создать код для исправления ошибки.

Заглушки отличаются от макетов тем, что они используются для представления и тестирования состояния объекта, тогда как макет проверяет его взаимодействие .

Роб Купер
источник
спасибо за ответ, но я все еще не понимаю: «реализация интерфейса» ??
BKSpurgeon
6

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

Kris
источник
1
Я не думаю, что это правильно. Вероятно, это происходит из-за такой практики в домашнем строительстве: hunker.com/12000314/what-is-a-stub-out
mattdm
3

«Заглушка» или «метод-заглушка» предназначены для использования в качестве начального кода или временной замены кода, который еще предстоит разработать. Это встроенный код, созданный IDE. Методы-заглушки - это фактически методы, используемые для тестирования методов определенного класса. Он используется путем ввода некоторых значений локальных переменных в ваши фактические методы разработки и проверки правильности вывода. Это важно для поиска ошибок в вашем коде.

Nasserr
источник
Этот ответ было бы лучше, если бы он объяснил более подробно: какова цель метода-заглушки? как это используется? почему это важно?
Эван Вайсбург
Спасибо! Я новичок в программировании и только начал изучать разработку программного обеспечения. Пока это то, что я понимаю о методах заглушки. Поэтому я не совсем уверен, какова его цель, важность и как она используется. Но я думаю, что методы-заглушки на самом деле являются методами, используемыми для тестирования методов определенного класса. Он используется путем ввода некоторых значений локальных переменных в ваши фактические методы разработки и проверки правильности вывода. Важно найти ошибки в ваших кодах. Если вам есть что добавить или исправить, оставьте комментарий. Я только сейчас изучаю тестирование.
Nasserr
1
Здорово, что ты учишься! Вам следует отредактировать исходный ответ, чтобы будущие читатели могли легко извлечь из него уроки, а не размещать в комментариях. Кроме того - если вы в чем-то не уверены, почему вы публикуете авторитетный ответ по этому поводу?
Эван Вайсбург
1
Это нормально, если вы самоучка - в StackOverflow вам не нужно публиковать ответы, если вы не уверены в них. Это не стандартный форум. См .: stackoverflow.com/tour
Эван Вайсбург
1
Большое спасибо за руководства и предложения. Действительно ценю это!
Nasserr
3

Недавно я столкнулся с вопросом и понял, что это сравнение между заглушкой и драйвером действительно ясное и полезное:

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

+ --------- + ------------------------------- + ------- ------------------------ +
| | Заглушка | Драйвер |
+ --------- + ------------------------------- + ------- ------------------------ +
| Тип | Фиктивные коды | Фиктивные коды |
+ --------- + ------------------------------- + ------- ------------------------ +
| Используется в | Интеграция сверху вниз | Интеграция снизу вверх |
+ --------- + ------------------------------- + ------- ------------------------ +
| Цель | Чтобы разрешить тестирование верхней | Чтобы разрешить тестирование нижнего |
| | уровней кода, когда | уровней кода, когда |
| | нижние уровни кода | верхние уровни кода |
| | еще не разработан. | еще не разработан. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Пример | A и B - компоненты. | A и B - компоненты. |
| | A ---> B | A ---> B |
| | | |
| | Был разработан. | Еще нужно разработать.
| | B все еще требует разработки. B. был разработан. |
| | Поэтому используется заглушка | Следовательно, драйвер используется |
| | вместо B, чтобы имитировать его. | вместо А, чтобы имитировать |
| | | |
| | A ---> Заглушка | Драйвер ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

От разницы между заглушкой и драйвером

Вахид Халладжи
источник
0

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

Дерич Лима
источник