2013-10-05 6 views
1

У меня есть сценарий питона, который делает это в начале сценария:Добавление модуля к питону во время выполнения

def initialize(module_name): 
    return importlib.import_module(module_name) # import module from string 

Я хочу написать тест, что «издевается» из имени модуля, как так:

def test(): 
    # assemble module at run time 
    module_obj = {'name': Object, 'another_name': AnotherObject} 

    # inject to the "import system" 
    inject_mock_module('mymodule', module_obj) 

    # assert that the import went correctly 
    assert my_module_mock == initialize('mymodule') 

Как это сделать? Во-первых, в частности, как создать module_obj и как определить inject_mock_module? Это должно работать как в версиях 2.7+, так и в 3.3+

+1

вы используете Python 2 или 3? –

ответ

2

Используйте mock library для определения функции import_module(). По состоянию на Python 3.3, вы можете импортировать этот модуль как unittest.mock:

try: 
    # Python 3.3+ 
    from unittest.mock import patch 
except ImportError: 
    # External dependency 
    from mock import patch 

def test(): 
    module_obj = {'name': Object, 'another_name': AnotherObject} 

    with patch('importlib.import_module', module_obj.get): 
     assert initialize('name') is module_obj['name'] 
Смежные вопросы