問題点
loggingのdictConfigを多重で噛ましていると、caplogの設定が飛んじゃうみたいですね。
pytestでUTコードを書いててうーんってなりました。
問題のコード
mainからTestAを実行するようなコードを書いてて、
TestAのみの試験を行ったらcaplogにログがキャプチャされていなかった。
※propagate
はFalseで設定
# module A
from logging import config, getLogger
config.dictConfig({"dict settings..."}) # ★
class TestA
def test():
getLogger().info("TestA")
# module main
from logging import config, getLogger
config.dictConfig({"dict settings..."})
from module_a import TestA
class Test
def test():
getLogger().info("Test")
TestA().test()
# pytest code
import logging
from module_a import TestA
def test_test_a_log(self, caplog):
caplog.set_level(logging.INFO)
# caplog.record_tuples is length 0.
assert len(caplog.record_tuples) == 1
※ちな、ソースコードは動作確認していない適当なものです。雰囲気だけ残しておく。
★の箇所をコメントアウトにすると動作する。
考えてみたらそうかな?とも思ったけれど、なんだか動きが腑に落ちないなぁ。。。
コメント