Что означает "заглушить" в программировании?

например, что это означает в этой цитате?

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

6 ответов


заглушка является управляемой заменой для Существующих Зависимостей (или коллаборационист) в системе. Используя заглушку, вы можете проверить свой код без борьбы с зависимостью напрямую.

Внешняя Зависимость-Существующая Зависимость:
Это объект в вашей системе, который ваш код под тестом взаимодействует и над которым у вас нет контроля. (Общий примерами являются файловые системы, потоки, память, время и так далее.)

Например в приведенном ниже коде:

public void Analyze(string filename)
    {
        if(filename.Length<8)
        {
            try
            {
                errorService.LogError("long file entered named:" + filename);
            }
            catch (Exception e)
            {
                mailService.SendEMail("admin@hotmail.com", "ErrorOnWebService", "someerror");
            }
        }
    }

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


A заглушки, в этом контексте, означает макет реализации.

то есть простая, поддельная реализация, которая соответствует интерфейсу и должна использоваться для тестирования.


термины непрофессионала, это фиктивные данные (или поддельные данные, тестовые данные...так далее.) который можно использовать для тестирования или разработки кода до тех пор, пока вы (или другая сторона) не будете готовы представить/получить реальные данные. Это программистский "Lorem Ipsum".

база данных сотрудников не готова? Придумай что-нибудь простое с Джейн Доу, Джон Доу...так далее. API не готов? Сделайте фальшивку, создав статику .файл json, содержащий поддельные данные.


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

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

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

самые известные виды заглушек очевидно для распределенного программирования, когда вызывать удаленные процедуры (RPC) или удаленные объекты (RMI, описание). Большинство распределенных программных фреймворков / библиотек автоматизируют генерацию заглушек, так что вам не нужно писать их вручную. Заглушки могут быть сгенерированы из определения интерфейса, написанного с помощью IDL например (но вы также можете использовать любой язык определения интерфейсов).

типично, в RPC, RMI, CORBA, и так далее, одно различает заглушки на стороне клиента, которые в основном заботятся о маршалинге / сериализации аргументов и выполнении удаленного вызова, и серверные стабы, которые в основном заботятся о unmarshaling / десериализации аргументов и фактически выполняют удаленную функцию/метод. Очевидно, что клиентские заглушки расположены на стороне клиента, в то время как заглушки sever (часто называемые скелетами) расположены на стороне сервера.

написание хороших эффективных и общих заглушек становится довольно сложным при работе со ссылками на объекты. Большинство фреймворков распределенных объектов, таких как RMI и CORBA, имеют дело со ссылками на распределенные объекты, но большинство программистов избегают этого, например, в средах REST. Как правило, в средах REST программисты JavaScript делают простые функции заглушки для инкапсуляции вызовов AJAX (сериализация объектов поддерживается JSON.parse и JSON.stringify). The Swagger Codegen проект обеспечивает обширное поддержка автоматического создания заглушек REST на разных языках.


У вас также есть очень хорошие рамки тестирования для создания такого заглушки. Один из моих предпочтительных Mockito появилась EasyMock и другие... Но Mockito велик, вы должны прочитать его - очень элегантный и мощный пакет


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

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