如果您想在单元测试之前快速进行修复,则无需进行任何困难的操作。
如果单元测试与您要测试的代码在同一个文件中,只需从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()