Как я могу динамически заменять встроенные функции Python в импортированном модуле для целей тестирования, не изменяя исPython

Программы на Python
Anonymous
Как я могу динамически заменять встроенные функции Python в импортированном модуле для целей тестирования, не изменяя ис

Сообщение Anonymous »

Я работаю над тестированием устаревшего модуля 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

Вернуться в «Python»