Pythonのunittestモジュールは、プログラムの特定の部分が期待通りに動作するかを確認するためのツールです。この記事では、Pythonのunittestでログメッセージをテストする方法について説明します。
assertLogsを使用する
PythonのunittestモジュールにはassertLogs
というメソッドがあります。このメソッドは、with文と一緒に使用することで、with文内で発生したログの出力を指定のコンテキストマネージャオブジェクトに格納します。
以下に、assertLogs
を使用してログメッセージをテストする例を示します。
import unittest
import logging
class Test_ProcessCaller(unittest.TestCase):
# ...
def test_processcaller_setlogger(self):
logger = logging.getLogger("TEST")
proc = ProcessCaller("python", "-V", logger=logger)
with self.assertLogs(logger=logger, level=logging.DEBUG) as cm:
proc.run()
self.assertEqual(cm.output, ['DEBUG:TEST:python -V'])
上記のコードは、「ProcessCaller#run()メソッドにおいて、デバッグレベルで呼び出したコマンドを出力することを確認する」というコードです。
ログメッセージの検証
assertLogs()
メソッドを呼び出すと、withブロック内でのログ出力がすべて、cm変数に格納されます。assertLogs()
の引数にロガーやログレベルを指定することで、収集するログを限定することができます。
そして、withブロックを抜けると、cm変数にはoutputとrecordという二つのプロパティが設定されます。これをassertEqual()
メソッドなどで期待した値と比較することで、「正しくログが出力されたか」を確認することができます。
以上が、Pythonのunittestでログメッセージをテストする基本的な方法です。この方法を使えば、プログラムが正しくログを出力しているかを確認することができます。