Mock-объекты в тестировании программного обеспечения — это имитации реальных зависимостей (функций, классов, модулей), используемые для изоляции тестируемого компонента. Они позволяют контролировать поведение симулируемых зависимостей, проверяя, как тестируемый код взаимодействует с ними (например, какие методы вызываются с какими аргументами) и возвращая предопределенные значения.
Использование mock-объектов:
В Python для работы с mock-объектами часто используется стандартный модуль unittest.mock или сторонние библиотеки, такие как pytest-mock.
Пример использования unittest.mock:
python
Различия между mock, stub и spy объектами:
| Тип объекта | Назначение | Основная цель | Проверка |
|---|---|---|---|
| Mock | Полностью симулирует зависимость. Определяет ожидаемое поведение и проверяет вызовы методов. | Проверка взаимодействия между объектами. | Проверяет, какие методы были вызваны, сколько раз, с какими аргументами. |
| Stub | Предоставляет предопределенные ответы на вызовы методов. | Обеспечение тестовых данных для тестируемого кода. | Не проверяет, были ли вызваны методы. |
| Spy | Оборачивает реальный объект и позволяет отслеживать вызовы методов без изменения поведения. | Отслеживание вызовов методов реального объекта. | Проверяет, какие методы реального объекта были вызваны. |
В контексте unittest.mock часто используется универсальный объект MagicMock, который может выступать как mock, stub или spy в зависимости от того, как он настроен и как используются его возможности assert_called_*.