如果你想在单元测试之前快速解决问题,那么不需要进行复杂的操作。
如果单元测试与你要测试的代码在同一个文件中,只需从globals()
字典中删除不需要的模块即可。
以下是一个相当冗长的示例:假设你有一个名为impp.py
的模块,其内容如下:
value = 5
现在,在你的测试文件中,你可以写:
>>> import impp
>>> print globals().keys()
>>> def printVal():
>>> print impp.value
['printVal', '__builtins__', '__file__', 'impp', '__name__', '__doc__']
请注意,
impp
是全局变量之一,因为它已被导入。调用使用
impp
模块的函数
printVal
仍然有效:
>>> printVal()
5
但是现在,如果您从globals()
中删除 impp
键...
>>> 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()
try: finally:
,以避免在出现错误的情况下将系统留在包装后的导入状态而不是默认状态。 - Yonatan