许多 Python 模块在不定义类的情况下保留内部状态,例如logging
维护多个可通过 getLogger()
访问的记录器。
如何测试这样的模块?
使用标准 unittest
工具,我希望 TestCase
类中的各种测试重新导入我的被测模块,以便每次它都失去其上下文。这能做到吗?
最佳答案
import unittest
import sys
class Test(unittest.TestCase):
def tearDown(self):
try:
del sys.modules['logging']
except KeyError:
pass
def test_logging(self):
import logging
logging.foo=1
def test_logging2(self):
import logging
print(logging.foo)
if __name__ == '__main__':
unittest.sys.argv.insert(1,'--verbose')
unittest.main(argv = unittest.sys.argv)
% test.py Test.test_logging
通过:
test_logging (__main__.Test) ... ok
但是
% test.py Test.test_logging2
不会:
test_logging2 (__main__.Test) ... ERROR
因为 logging
的内部状态已经被重置。
关于python - 重新导入被测模块以丢失上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7460363/