Что такое "заглушка"? - PullRequest
       47

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

107 голосов
/ 21 января 2009

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

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

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

Ответы [ 6 ]

95 голосов
/ 21 января 2009

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

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

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

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

28 голосов
/ 21 января 2009

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

  • Набор данных
  • список пользователей
  • XML-файл

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

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

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

7 голосов
/ 08 марта 2013

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

2 голосов
/ 13 января 2018

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

1 голос
/ 22 апреля 2018

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

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

+---------+-------------------------------+-------------------------------+
|         | Stub                          | Driver                        |
+---------+-------------------------------+-------------------------------+
| Type    | Dummy codes                   | Dummy codes                   |
+---------+-------------------------------+-------------------------------+
| Used in | Top Down Integration          | Bottom Up Integration         |
+---------+-------------------------------+-------------------------------+
| Purpose | To allow testing of the upper | To allow testing of the lower |
|         | levels of the code, when the  | levels of the code, when the  |
|         | lower levels of the code are  | upper levels of the code are  |
|         | not yet developed.            | not yet developed.            |
+---------+-------------------------------+-------------------------------+
| Example | A and B are components.       | A and B are components.       |
|         | A ---> B                      | A ---> B                      |
|         |                               |                               |
|         | A has been developed.         | A still needs to be developed.|
|         | B still needs to be developed.| B has been developed.         |
|         | Therefore, stub is used       | Therefore, driver is used     |
|         | in place of B to imitate it.  | in place of A to imitate it   |
|         |                               |                               |
|         | A ---> Stub                   | Driver ---> B                 |
+---------+-------------------------------+-------------------------------+

С Разница между заглушкой и драйвером

0 голосов
/ 28 января 2019

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

...