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 に答える