![](/static/djangobb_forum/img/smilies/smile.png)
имеется модуль, который нужно протестировать - “master_module.py”:
# different imports, path patches, etc... ... from clients import WebAPIClient from utils.conf import config class WebClient(object): def __init__(self): conf = config.get_config('web') self.__client = WebAPIClient(host=conf['master_service.host'],\ user=conf['master_service.user'], \ password=conf['master_service.password']) .... # different methods ....
Суть в том, что не получается подсунуть “замокать” config.get_config(), чтобы он вернул нужный словарь. К примеру, если в юниттесте я сделаю так:
sys.modules['utils.conf'] = Mock() from master_module import WebClient config = Mock() config.get_config = Mock(return_value={'master_service.host':'mock_host', 'master_service.user':'mock_user', 'corpus_api.password':'mock_pass'}) print config.get_config()
то он напечатает нужный словарь, но когда вызываю:
client = WebClient()
то этот замоканный config не передается, а передается лишь - sys.modules = Mock(), в итоге получаю:
Traceback .... bla-bla .... in __init__ host=conf['master_service.host'], \ TypeError: 'Mock' object is unsubscriptable
Как решить данную проблему?
Сумел пропатчить вот таким способом:
import clients globals()['clients'].config = config # assign mocked config
где config - это уже тот мой замоканный
Возможно, есть более элегантное решение? Или вообще другой подход к такому тестированию?
![](/static/djangobb_forum/img/smilies/smile.png)