许多 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/

10-12 20:23