Что значит «заглушить» в программировании? - PullRequest
100 голосов
/ 20 марта 2012

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

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

Ответы [ 7 ]

93 голосов
/ 29 декабря 2012

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

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

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

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.SendEMail () метод, но для этого вам нужно смоделировать Исключение в вашем методе тестирования, поэтому вам просто нужно создать Fake Stub errorService объект для имитации желаемого результата, тогда ваш тестовый код сможет протестировать mailService.SendEMail () метод. Как видите, вам нужно смоделировать результат, полученный из другой зависимости, которая является ErrorService объектом класса (Существующий объект зависимости).

89 голосов
/ 20 марта 2012

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

То есть простая, поддельная реализация, соответствующая интерфейсу и предназначенная для тестирования.

52 голосов
/ 08 мая 2015

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

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

7 голосов
/ 13 марта 2018

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

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

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

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

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

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

3 голосов
/ 20 марта 2012

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

1 голос
/ 27 апреля 2016

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

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

0 голосов
/ 08 марта 2019

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

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

...