Jon*_*han 10 python import unit-testing python-module
许多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)
Run Code Online (Sandbox Code Playgroud)
% test.py Test.test_logging 经过:
test_logging (__main__.Test) ... ok
Run Code Online (Sandbox Code Playgroud)
但
% test.py Test.test_logging2不是:
test_logging2 (__main__.Test) ... ERROR
Run Code Online (Sandbox Code Playgroud)
因为内部状态logging已被重置.
这将为您重新导入该模块为新模块:
import sys
del sys.modules['my_module']
import my_module
Run Code Online (Sandbox Code Playgroud)