13

许多 Python 模块在不定义类的情况下保留内部状态,例如,logging维护多个可通过getLogger().

你如何测试这样的模块?
使用标准unittest工具,我希望类中的各种测试TestCase重新导入我的被测模块,以便每次它失去其上下文。这可以做到吗?

4

2 回答 2

14
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已被重置。

于 2011-09-18T08:56:34.587 回答
10

这将为您重新导入新模块:

import sys
del sys.modules['my_module']
import my_module
于 2011-09-18T08:50:57.117 回答