В тестировании программного обеспечения макет и заглушка — это два популярных типа тестовых двойников, используемых для моделирования зависимостей. Они помогают изолировать поведение компонента, заменяя реальные зависимости контролируемыми заменителями во время тестирования. Хотя и макеты, и заглушки служат одинаковым целям, они используются по-разному в зависимости от типа сценария тестирования.
В этой статье подробно рассматриваются ключевые различия между макетами и заглушками, варианты их использования и случаи использования каждого из них в вашей стратегии тестирования.
Что такое тестовый дубль?
Тестовый двойник — это общий термин для любого объекта или компонента, который используется для замены реальной зависимости во время тестирования. Цель состоит в том, чтобы изолировать тестируемый компонент и устранить внешние факторы, которые могут повлиять на результат теста. Моки и заглушки — это два типа тестовых двойников, часто используемые при модульном и интеграционном тестировании.
Что такое заглушка?
Заглушка — это тестовый дубль, который возвращает предопределенные данные при вызове тестируемого компонента. Обычно он используется, когда тестируемый компонент требует ввода от зависимости, но фактическое поведение зависимости не имеет отношения к результату теста. Заглушки обеспечивают контролируемые ответы, позволяя вам сосредоточиться только на логике внутри компонента.
Пример заглушки:
Допустим, вы тестируете функцию обработки платежей. Вместо вызова реального платежного шлюза вы используете заглушку, которая всегда возвращает ответ «платеж успешен», гарантируя, что логику функции можно протестировать независимо.
const paymentGatewayStub = { processPayment: () => "payment successful" }; function processOrder(paymentService) { const result = paymentService.processPayment(); return result === "payment successful" ? "Order Complete" : "Order Failed"; } // Test console.log(processOrder(paymentGatewayStub)); // Output: "Order Complete"
В этом случае заглушка гарантирует, что внешняя служба всегда возвращает ожидаемый результат, что упрощает тестирование внутренней логики.
Что такое макет?
Макет — это тестовый дубль, который не только предоставляет поддельные данные, но и проверяет взаимодействие между компонентами. Моки помогают гарантировать, что правильные методы вызываются с правильными параметрами и что желаемая последовательность событий происходит во время выполнения. Обычно они используются, когда поведение или взаимодействие компонента имеет значение для теста.
Пример макета:
Используя тот же пример оплаты, предположим, вы хотите убедиться, что методprocessPayment() вызывается ровно один раз во время обработки заказа.
const paymentGatewayMock = { processPayment: jest.fn().mockReturnValue("payment successful") }; function processOrder(paymentService) { paymentService.processPayment(); } // Test processOrder(paymentGatewayMock); expect(paymentGatewayMock.processPayment).toHaveBeenCalledTimes(1);
В этом случае макет проверяет взаимодействие, проверяя, был ли вызван метод, гарантируя, что компонент ведет себя правильно во время выполнения.
Ключевые различия между макетом и заглушкой
Заготовка макета аспекта
Цель Проверяет взаимодействие между компонентами Предоставляет заранее определенные ответы
Поведение Проверяет вызовы методов и параметры. Возвращает только статические данные
Сценарий использования Используется, когда взаимодействие имеет значение. Используется, когда вывода данных достаточно.
Сложность Сложнее реализовать Проще создать
Пример метода Test Verifying вызывает логику тестирования с фиксированными ответами
Когда использовать заглушку
• Тестирование простой логики: используйте заглушку, когда вам нужно только контролировать вывод зависимости.
• Тесты, управляемые данными. Если основное внимание уделяется тестированию того, как ваш компонент ведет себя с конкретными данными, лучше подходят заглушки.
• Пример варианта использования: если вы тестируете функцию входа в систему, для которой требуются пользовательские данные из базы данных, используйте заглушку, чтобы вернуть фиктивного пользователя без вызова реальной базы данных.
Когда использовать макет
• Тестирование на основе взаимодействия. Если основное внимание уделяется обеспечению вызова правильных методов с правильными параметрами, используйте макет.
• Тестирование сложных взаимодействий: макеты идеально подходят для компонентов, которые взаимодействуют с несколькими службами или API.
• Пример варианта использования: если вы тестируете службу отправки электронной почты, используйте макет, чтобы убедиться, что функция sendEmail() была вызвана с ожидаемым получателем и сообщением.
Можно ли использовать макеты и заглушки вместе?
Да, в некоторых случаях макеты и заглушки используются вместе в рамках одного теста для достижения как проверки взаимодействия, так и контролируемых ответов. Например, вы можете использовать заглушку для возврата определенных данных и макет для проверки того, что была вызвана определенная служба.
Плюсы и минусы моков и заглушек
Плюсы заглушек:
• Просто и легко реализовать
• Полезно для изолированного тестирования логики компонентов
Минусы заглушек:
• Невозможно проверить вызовы методов или параметры
• Ограничено статическими ответами
Плюсы моков:
• Проверяет поведение, взаимодействия и последовательности
• Полезно для сложных сценариев с множеством зависимостей
Минусы моков:
• Требует дополнительных настроек и может затруднить чтение тестов
• При неосторожном использовании тесты могут оказаться ненадежными
Mock против Stub: какой из них использовать?
• Если ваш тест зависит от выходных данных зависимости и вы хотите контролировать эти выходные данные, используйте заглушку.
• Если вам нужно убедиться, что метод был вызван, или проверить взаимодействие между компонентами, используйте макет.
• Для модульного тестирования чаще используются заглушки, поскольку основное внимание уделяется тестированию внутренней логики.
• При интеграционном тестировании макеты более полезны при проверке взаимодействия различных частей системы.
Заключение
И макеты, и заглушки играют важную роль в стратегиях тестирования, но каждый из них служит разным целям. В то время как заглушки контролируют данные, возвращаемые зависимостью, макеты гарантируют правильное взаимодействие между компонентами. Понимание того, когда и как использовать каждый из них, может улучшить качество ваших тестов, что приведет к созданию более надежного программного обеспечения. Правильно применяя макеты и заглушки, команды могут уменьшить количество ошибок, ускорить разработку и создать более эффективные стратегии тестирования как для модульных, так и для интеграционных тестов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3