You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试入参为record类型的post_log_filter日志过滤函数

测试失败原因及修复方案

核心问题

你编写的预期返回False的测试用例错误使用了logging.Formatter构造测试参数,而post_log_filter需要接收logging.LogRecord实例作为入参,且需要实例的属性匹配过滤规则的键值对。
原函数的判断逻辑是检查record.__dict__是否包含过滤规则里的所有键值对,你传入的Formatter实例没有对应filename、funcName属性,因此判断永远不成立,测试始终返回True。

正确的测试用例构造方法

直接构造logging.LogRecord实例,手动设置和过滤规则匹配的属性即可,修改后的test_my_logging.py对应测试方法如下:

def test_post_log_filter_false(self):
    # 测试匹配第一条过滤规则的场景
    record1 = logging.LogRecord(
        name=None, level=None, pathname=None, lineno=None,
        msg=None, args=None, exc_info=None
    )
    record1.filename = 'basehttp.py'
    record1.funcName = 'log_message'
    self.assertEqual(False, post_log_filter(record1))

    # 测试匹配第二条过滤规则的场景
    record2 = logging.LogRecord(
        name=None, level=None, pathname=None, lineno=None,
        msg=None, args=None, exc_info=None
    )
    record2.filename = 'options.py'
    record2.funcName = 'construct_change_message'
    self.assertEqual(False, post_log_filter(record2))

验证说明

修改后构造的LogRecord实例的__dict__会包含和过滤规则完全匹配的键值对,原函数的判断逻辑会命中,返回False,测试即可正常通过。

内容的提问来源于stack exchange,提问作者Dinesh Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:45:05