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

Python单元测试断言失败:Mock Secrets Manager实例方法后预期值不匹配

排查Mock Secrets Manager实例方法的断言失败问题

问题场景

  • 原非类结构中,通过@patch('my_repo.rc.client')可正常Mock Secrets Manager客户端
  • 改为实例方法后,参考资料实现Mock,却出现断言错误:实际返回<MagicMock name='id_lookup()' id='4589498032'>,与预期{'secret': 'gotsomecreds'}不匹配

常见排查方向

1. Mock路径错误

Mock实例方法时,必须patch被测试代码实际调用的类方法路径,而非实例对象。比如:

  • 若被测试代码从RC类实例调用id_lookup,则patch路径应为my_repo.rc.RC.id_lookup(假设类名为RC)
  • 错误示例:直接patch实例本身,导致Mock未生效,返回原始MagicMock对象

2. 未设置Mock返回值

仅patch方法但未给MagicMock指定return_value,调用时会返回MagicMock对象本身,而非预期字典。正确示例:

@patch('my_repo.rc.RC.id_lookup')
def test_my_method(mock_id_lookup):
    # 必须设置返回值
    mock_id_lookup.return_value = {'secret': 'gotsomecreds'}
    # 在测试函数内创建实例
    result = RC().id_lookup()
    assert result == {'secret': 'gotsomecreds'}

3. 实例化时机错误

如果在patch之前创建类实例,该实例的方法不会被Mock覆盖。错误示例:

# 错误:实例创建在patch前
rc_instance = RC()

@patch('my_repo.rc.RC.id_lookup')
def test_my_method(mock_id_lookup):
    mock_id_lookup.return_value = {'secret': 'gotsomecreds'}
    # 调用的是未被Mock的原始方法
    result = rc_instance.id_lookup()

正确做法:在patch装饰的测试函数内部创建类实例。

4. 方法名或参数不匹配

检查被Mock的方法名是否和实际调用的完全一致(比如拼写错误);若方法带参数,确认Mock是否匹配参数场景(可使用side_effect处理多参数情况)

补充建议

贴出rc.py中类的定义、id_lookup方法实现,以及test_secrt.py的patch路径、Mock设置和测试逻辑,可以更精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:10:33