我有这段代码要测试:
log = logging.getLogger(__name__)
class A(object):
def __init__(self):
log.debug('Init')
但我不知道如何断言 log.debug 是用 'Init' 调用的
我尝试修补记录器,但检查它我只发现了一个 getLogger 模拟。
我确定它很简单,但我就是想不通!
提前感谢您的任何帮助!
最佳答案
您可以在实际的日志记录对象上使用 patch.object()
。这可以让您验证您是否也在使用正确的记录器:
logger = logging.getLogger('path.to.module.under.test')
with mock.patch.object(logger, 'debug') as mock_debug:
run_code_under_test()
mock_debug.assert_called_once_with('Init')
或者,如果您使用的是 Pytest,那么它已经有一个夹具可以为您捕获日志:
def test_bar(caplog):
with caplog.at_level(logging.DEBUG):
run_code_under_test()
assert "Init" in caplog.text
# or, if you really need to check the log-level
assert caplog.records[-1].message == "Init"
assert caplog.records[-1].levelname == "DEBUG"
更多信息见 pytest docs on logging
关于python - 如何修补/模拟 logging.getlogger(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901360/