我有一系列使用 python logging 模块
的单元/集成测试。我想测试是否在适当的时候记录了正确的事情,我可以使用 mock
模块实现,如下所示:
@mock.patch('logging.Logger.info')
但是,当我这样做时,实际的日志记录会停止(原因很明显!),这对我调试我的测试工作的原因等很有用。
我的问题如下:有没有一种方法可以模拟日志记录调用,以便我可以断言它们已使用预期参数调用但仍保留日志记录功能?
我目前的方法是制作一个包装器类,其中包含一个 MagicMock 和一个未模拟的记录器:
class MonkeyPatchLogger(object):
MOCK = mock.MagicMock()
@classmethod
def info(cls, *args, **kwargs):
cls.MOCK(*args, **kwargs)
logger.info(*args, **kwargs)
但这行不通。
干杯, jack
最佳答案
我发布了 this在 2010 年关于单元测试和日志记录——它应该仍然是相关的。内容太大,无法在此处总结为答案,因此提供了一个链接。
关于Python模拟日志记录同时保留日志输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204459/