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

使用mock断言函数未调用时出现AssertionError: assert None错误排查

问题分析与解决

错误原因

assert_not_called() 是Mock对象的断言方法,它本身就会在验证失败时抛出AssertionError,不需要用assert关键字包裹。因为这个方法执行成功时返回None,你写assert get_security_status.assert_not_called()就相当于断言None,这必然会触发AssertionError: assert None。

修正后的测试代码

修改测试函数中的断言部分,直接调用assert_not_called()即可:

def test_persist(...): 
    ... 
    exg._meta.metadata = {
                    ('EBBO_0', '20210104'): {'ccy': '', 'mic': 'xswx'},
                    ('EBBO_00', '20210104'): {'ccy': 'GBPO', 'mic': 'xswx'}
                  }

    with patch('exchanges.exchange.Meta._get_security_status') as get_security_status:
        exg._meta.persist(security_files_generated)
        # 直接调用断言方法,无需加assert关键字
        get_security_status.assert_not_called()

补充说明

  • Mock对象的断言方法(如assert_called()、assert_called_once()、assert_not_called()等)都是自包含断言逻辑,调用后会自动验证并在不满足条件时抛出异常,不需要额外用assert包裹。
  • 你通过断点确认_get_security_status未被调用是正确的,修正后测试用例会正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:09