多くの Python モジュールは、クラスを定義せずに内部状態を保持します。たとえば、logging
経由でアクセス可能ないくつかのロガーを維持しますgetLogger()
。
そのようなモジュールをどのようにテストしますか?
標準unittest
ツールを使用して、TestCase
クラス内のさまざまなテストで、テスト対象のモジュールを再インポートして、そのコンテキストが失われるようにしたいと考えています。これはできますか?
多くの 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
がリセットされたため。
これにより、モジュールが新しいものとして再インポートされます。
import sys
del sys.modules['my_module']
import my_module