使用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
相关产品推荐
相关产品推荐

