ВидыСтабы (stub) помогают имитировать входящие (incoming) взаимодействия. Работа с данными.
Stubs помогают имитировать входящие (incoming) взаимодействия. То есть вызовы, совершаемые тестируемой системой к ее зависимостям для получения входных данных. В данном случае мы управляем состоянием. stub – это функция, которая всегда выводит один и тот же результат, вне зависимости от того, что было подано на вход.
Моки (mock) помогают имитировать и изучать исходящие (outcoming) взаимодействия. Работа с поведением.
Mocks помогают имитировать и изучать исходящие (outcoming) взаимодействия. То есть вызовы, совершаемые тестируемой системой к ее зависимостям для изменения их состояния. В данном случае мы управляем поведением.
ТипыОбъект-заглушка (Dummy Object) – это простое, жестко закодированное значение, например, null или выдуманная строка. Он используется для корректной передачи параметров в метод и не участвует в получении конечного результата. Т.е. это объекты, которые передаются в методы, но на самом деле не используются.
Тестовая заглушка (Test Stub) –
Тестовая заглушка (Test Stub) – объект, который независимо от переданных на вход значения данных всегда (или чаще всего) предоставляет один и тот же жёстко фиксированный ответ (без логики ветвления). Может применяться для эмуляции ошибок или проверки поведения тестируемой системы на полученный конкретный ответ.
Поддельный объект (Fake Object) – используется для замещения функциональности настоящего вызываемого компонента в ситуациях, не предполагающих проверку опосредованного ввода или вывода.
Обычно Fake Object содержит реализацию той же функциональности, что и настоящий вызываемый компонент, но основанную на значительно более простых средствах.
Чаще всего используется, когда вызываемый компонент еще недоступен, работает слишком медленно или не может применяться в тестовой среде из-за нежелательных побочных эффектов.
Можно сказать, что Fake – это то же самое, что и Stub для большинства целей. Разница заключается в причинах его создания: Fake обычно используется для замены еще не существующей зависимости. Это фактическая реализация контракта, но она не подходит для производства.
Тестовый агент (Test Spy) – это более сложная версия Stub и Mock объекта. Используется для наблюдения или записей вызовов внутри вызываемого метода. Он перехватывает опосредованный вывод и сохраняет его для последующей проверки тестом.
Как и в случае Stub-ов, Spy может передавать в тестируемую систему значения в ответ на вызовы методов.
При слежке реальный объект остается неизменным, и мы просто подсматриваем за ним какими-то специфическими приемами. Другими словами, мы берем существующий (реальный) объект и заменяем или подсматриваем только некоторые его методы.
Таким образом, во многих отношениях Spy это ‘‘просто’’ Stub с функцией записи. Хотя тестовый агент используется для тех же целей, что и Mock, тесты с его использованием намного больше похожи на тесты с использованием заглушки.
Подставной объект (Mock Object) – обычно подставной объект (Mock Object) содержит функциональность тестовой заглушки (Test Stub), но реализует гибкую логику поведения системы. Mock – объекты, которые настраиваются (например, специфично каждому тесту) и позволяют задать ожидания, например, в виде спецификации вызова, который мы планируем получить. В отличии от stub, mock работает на верификацию поведения.
Чаще всего тестовые двойники используются:
- Для unit-тестов
- Проверка ещё не реализованной функциональной зоны тестируемой системы
- Когда нет доступа к тестовой среде внешней системы (отсутствует интеграция)
- Есть потребность в гибких проверках поведения тестируемой системы на основе специфичных данных или данных, которые сложно получить или эмулировать в реальной работе
- Сложная специфика настройки интеграции с внешней системой и последующее использование в тестах
- Требуются различные механизмы поведения системы, которые не целесообразно проводить при интеграции с другими системами