Никаких сложных манипуляций не требуется, если вы хотите быстро и грязно исправить перед вашими юнит-тестами.
Если модульные тесты находятся в том же файле, что и код, который вы хотите протестировать, просто удалите ненужный модуль из словаря globals()
.
Вот довольно длинный пример: предположим, у вас есть модуль impp.py
с содержимым:
value = 5
Теперь в вашем тестовом файле вы можете написать:
>>> import impp
>>> print globals().keys()
>>> def printVal():
>>> print impp.value
['printVal', '__builtins__', '__file__', 'impp', '__name__', '__doc__']
Обратите внимание, что impp
входит в число глобальных, потому что оно было импортировано. Вызов функции printVal
, использующей модуль impp
, по-прежнему работает:
>>> printVal()
5
Но теперь, если вы удалите ключ impp
из globals()
...
>>> del globals()['impp']
>>> print globals().keys()
['printVal', '__builtins__', '__file__', '__name__', '__doc__']
... и попробуйте позвонить printVal()
, вы получите:
>>> printVal()
Traceback (most recent call last):
File "test_imp.py", line 13, in <module>
printVal()
File "test_imp.py", line 5, in printVal
print impp.value
NameError: global name 'impp' is not defined
... что, вероятно, именно то, что вы пытаетесь достичь.
Чтобы использовать его в своих модульных тестах, вы можете удалить глобальные переменные непосредственно перед запуском набора тестов, например, в __main__
:
if __name__ == '__main__':
del globals()['impp']
unittest.main()