Я работаю над тестированием устаревшего модуля Python, который в значительной степени опирается на встроенные функции, такие как print(), len() и другие, но я не хочу напрямую изменять исходный код модуля. Цель состоит в том, чтобы динамически заменить эти встроенные функции макетными реализациями для имитации определенного поведения во время тестирования (например, замена print() для захвата печатного вывода).
Мне известно о unittest.mock и как он работает для имитации функций в определенной области, но я изо всех сил пытаюсь понять, как перехватить встроенные модули для импортированного модуля, не меняя сам этот модуль.
Код: Выделить всё
def legacy_function(): print("This is a legacy function") return len([1, 2, 3])
Я хочу имитировать print() и len() только в контексте Heritage_function() при запуске тестов, но без изменения самого файла Heritage_module.py.
Что я пробовал:
- Использование unittest.mock.patch() во встроенных модулях для Legacy_function , но, похоже, это влияет на всю среду, а не только на эту функцию.
- Замена встроенных функций в глобальной области видимости, но это также приводит к непредсказуемым побочным эффектам.
Есть ли способ имитировать встроенные модули только в рамках определенной функции в импортированном модуле, динамически во время выполнения, не изменяя исходный код модуля ?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ted-module