Python模拟日志记录同时保留日志输出

标签 python unit-testing testing logging mocking

我有一系列使用 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/

相关文章:

python - 通过在 pandas 中分组和添加值来展平列

具有依赖于 CPU 密集型计算的响应的 Python 异步 REST API。如何高效处理?

python - 用 Pandas 数据框计算加权平均值

Python:如何在我的测试套件中制作临时文件?

ruby - 在 ruby​​ selenium 中捕获超时事件

python - Socketserver multiprocessing.Process 正在启动而不调用 start()

c# - 使用 nUnit 和 nMocks 进行单元测试

unit-testing - Spring Aspect 未在单元测试中触发

sql - 如何测试SQL脚本? (数据完整性/迁移测试)

python - 两个脚本的测试速度