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


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

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

6 84

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 stub, в этом контексте, означает макет реализации.

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

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

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

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

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

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

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

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

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

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

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