← Назад ко всем вопросам

Что такое monkey patch (тестирование)?

1️⃣ Как кратко ответить

Monkey patching — это техника в программировании, позволяющая изменять или расширять поведение существующего кода во время выполнения. В тестировании она используется для замены или модификации функций и методов, чтобы изолировать тестируемый код от внешних зависимостей.

2️⃣ Подробное объяснение темы

Monkey patching — это метод, который позволяет изменять или добавлять функциональность в существующий код во время его выполнения. Это может быть полезно в различных ситуациях, особенно в тестировании, когда необходимо изолировать код от внешних зависимостей или изменить поведение сторонних библиотек.

Зачем это нужно?

В тестировании часто возникает необходимость изолировать тестируемый код от внешних зависимостей, таких как базы данных, сетевые соединения или сторонние API. Monkey patching позволяет временно заменить эти зависимости на заглушки или моки, что делает тесты более предсказуемыми и быстрыми.

Как это работает?

Monkey patching работает за счет динамического изменения кода. В Python, например, это может быть сделано путем замены метода или функции на другую функцию. Это изменение происходит в памяти и действует только во время выполнения программы.

Пример использования

Представьте, что у вас есть функция, которая делает HTTP-запрос к внешнему API:

import requests
​
def get_data_from_api(url):
    response = requests.get(url)
    return response.json()

Для тестирования этой функции без реального HTTP-запроса можно использовать monkey patching:

import requests
from unittest.mock import patch
​
def mock_get(url):
    class MockResponse:
        def json(self):
            return {"key": "value"}
    return MockResponse()
​
with patch('requests.get', mock_get):
    data = get_data_from_api('http://example.com')
    print(data)  # Выведет: {'key': 'value'}

В этом примере requests.get заменяется на mock_get, который возвращает заранее определенный ответ. Это позволяет тестировать функцию get_data_from_api без фактического обращения к сети.

Тема: Тестирование
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки