许多Python模块保留内部状态而不定义类,例如logging
通过getLogger()
维护了几个记录器。
如何测试这样的模块?
使用标准unittest
工具,我希望TestCase
类中的各种测试重新导入我的模块测试,以便每次失去其上下文。可以这样做吗?
答案 0 :(得分:9)
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
的内部状态已被重置。
答案 1 :(得分:5)
这将为您重新导入模块:
import sys
del sys.modules['my_module']
import my_module