重新导入待测模块以丢失上下文
很多Python模块在内部会保持一些状态,但并不一定要定义类,比如说logging
模块就有几个日志记录器,可以通过getLogger()
来访问。
那么,怎么测试这样的模块呢?
我想用标准的unittest
工具来做测试。我希望在一个TestCase
类里的不同测试中,每次都重新导入我想测试的模块,这样每次测试的时候它都能“忘记”之前的状态。这样可以做到吗?
2 个回答
11
这段代码会把这个模块重新导入,像是给你一个全新的模块一样:
import sys
del sys.modules['my_module']
import my_module
17
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
的内部状态已经被重置了。