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

如何让Magic Mock模拟对象的方法调用时返回指定值?

问题分析与解决方案

你的问题出在模拟对象的层级关系处理错误:业务代码中是通过db.cursor()调用方法获取游标实例,再调用游标上的getbatcherrors();但你当前直接给db.cursor(方法本身)绑定了getbatcherrors的返回值,这和实际调用逻辑完全不匹配,导致设置的返回值不会被触发。

修正后的测试代码

def test_function(self):
    # 1. 先模拟游标对象
    mock_cursor = mock.MagicMock()
    # 2. 给游标设置getbatcherrors的返回值,触发错误分支
    mock_cursor.getbatcherrors.return_value = ["test", "1", "2"]
    # 3. 让数据库连接对象的cursor()方法返回这个模拟游标
    db = mock.MagicMock(spec=['cursor'])
    db.cursor.return_value = mock_cursor
    
    query = "insert SQL query here"
    result = function_to_test(db, query)
    self.assertFalse(result)
    
    # 可选:验证executemany的调用是否符合预期
    mock_cursor.executemany.assert_called_once_with(query, batcherrors=True)

核心逻辑说明

  • 业务代码的执行链是:db.cursor() → 获取游标实例 → 调用实例的executemany()和getbatcherrors()
  • 你之前的写法db.cursor.getbatcherrors.return_value,是给db.cursor这个方法对象添加属性,而非给db.cursor()返回的游标实例添加,所以业务代码中的cursor.getbatcherrors()不会读取到你设置的返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:16:03