Я пытаюсь исправить внутреннюю функцию пакета, определенную в __init__.py
, которая используется функцией внутри модуля внутри того же пакета.Проблема, с которой я сталкиваюсь, заключается в том, что она не исправляется.
У меня был некоторый успех, когда я изменил оператор импорта внутри модуля, использующего функцию, которую нужно исправить наабсолютный импорт.Проблема в том, что я не хочу абсолютного импорта, поэтому рефакторинг кода будет проблематичен.
Структура моей тестовой установки:
|- mylib
| |- __init__.py
| \- process.py
|- tests
| \- test_process.py
|- setup.py
Инициализация пакета
# __init__.py
def store_info(info):
raise ValueError('No connection!')
Предполагаемая ситуация
# process.py
from . import store_info
def process_info(info):
store_info(info)
# test_process.py
from unittest.mock import patch
import mylib.process
@patch('mylib.store_info')
def test_process_info(store_info_mock):
info = "Some info"
mylib.process.process_info(info)
store_info_mock.assert_called_with(info)
Когда я изменил импорт в process.py
с относительного на абсолютный импорт, он работает.
# process.py
import mylib
def process_info(info):
mylib.store_info(info)
С оператором импорта, подобным import mylib
, тест проходит с соответствующим исправленным макетом.Используя оператор типа from . import store_data
, функция не исправляется.
Существует ли возможность использовать относительный импорт и при этом иметь возможность исправлять функцию в том же пакете?Если так, что является хорошей практикой для этого?