В этом контексте слово «заглушка» используется вместо «макет», но для ясности и точности автору следовало использовать «макет», потому что «макет» - это своего рода заглушка, но для тестирования. Чтобы избежать дальнейшей путаницы, нам нужно определить, что такое заглушка.
В общем контексте заглушка - это часть программы (обычно функция или объект), которая инкапсулирует сложность вызова другой программы (обычно расположенной на другом компьютере, виртуальной машине или процессе, но не всегда, она также может быть локальной. объект). Поскольку фактическая вызываемая программа обычно не находится в одном и том же пространстве памяти, ее вызов требует множества операций, таких как адресация, выполнение фактического удаленного вызова, маршалинг / сериализация данных / аргументов, которые необходимо передать (и то же самое с потенциальным результатом), может даже иметь дело с аутентификацией / безопасностью и так далее. Обратите внимание, что в некоторых случаях заглушки также называются прокси (например, динамические прокси в Java).
Мок - это очень специфический и ограничивающий вид заглушки, потому что макет - это замена другой функции или объекта для тестирования. На практике мы часто используем моки в качестве локальных программ (функций или объектов) для замены удаленной программы в тестовой среде. В любом случае макет может имитировать реальное поведение замененной программы в ограниченном контексте.
Наиболее известные виды заглушек, очевидно, предназначены для распределенного программирования, когда необходимо вызывать удаленные процедуры ( RPC ) или удаленные объекты ( RMI , CORBA ). Большинство фреймворков / библиотек распределенного программирования автоматизируют создание заглушек, поэтому вам не нужно писать их вручную. Заглушки можно сгенерировать из определения интерфейса, написанного, например, с помощью IDL (но вы также можете использовать любой язык для определения интерфейсов).
Обычно в RPC, RMI, CORBA и т. Д. Различают заглушки на стороне клиента , которые в основном заботятся о маршалинге / сериализации аргументов и выполнении удаленного вызова, и заглушки на стороне сервера , которые в основном заботятся о демаршалинге / десериализации. аргументы и фактически выполнить удаленную функцию / метод. Очевидно, что клиентские заглушки расположены на стороне клиента, а заглушки серверов (часто называемые скелетами) расположены на стороне сервера.
Написание хороших эффективных и универсальных заглушек становится довольно сложной задачей при работе со ссылками на объекты. Большинство сред распределенных объектов, таких как RMI и CORBA, имеют дело со ссылками на распределенные объекты, но большинство программистов этого избегают, например, в средах REST. Обычно в средах REST программисты JavaScript создают простые функции-заглушки для инкапсуляции вызовов AJAX (сериализация объектов поддерживается с помощью JSON.parse
и JSON.stringify
). Проект Swagger Codegen предоставляет обширную поддержку для автоматического создания заглушек REST на различных языках.