こんにちはsekitakaです。
普段何気なくログを出力していますが、ログが確かに出力されていることをテストしたいことがたまにあります。
この記事では「ログが出力されている」ことをテストする方法を紹介します。
テスト方法
testfixtures
ログが出力されていることをテストするにはtestfixturesというパッケージを利用します。
pip install testfixtures
使用例
次の例ではput_logという関数がINFOレベルでfoo
というログを出力することをテストしています。
# coding=utf-8
from testfixtures import LogCapture
import logging
from unittest import TestCase
import unittest
logger = logging.getLogger()
def put_log(message):
logger.info(message)
class Test(TestCase):
def test_put_log(self):
with LogCapture() as l:
put_log("foo")
l.check(
("root","INFO","foo")
)
if __name__ == '__main__':
unittest.main
応用
LogCapture()
の引数によってloggerの名前や、キャプチャするログレベルのフィルタリングなどができます。
また log_str = str(l)
とすることで、以下のような形式のログの全文を文字列として取得できるので、正規表現マッチングなどのアサーションによってテストするのも良いかもしれません。
root INFO
foo
しかしどこまでテストするのかいつも悩ましい