多くの 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