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

如何用Python unittest解决Mock对象无法支持列表索引的问题?

解决Mock对象返回列表后无法索引的问题

咱们先理清楚你测试代码里的问题根源:你把**要测试的业务函数execute_call**当成了Mock对象,但实际上你应该Mock的是这个函数的依赖——也就是传入的model对象的execute方法。

你当前的测试代码里,直接把execute_call变成了Mock,导致运行测试时根本没有执行业务代码里的model.execute(payload)和code = result[0]逻辑,反而返回了一个Mock对象,这自然会报"Mock不支持索引"的错误。

修正后的测试代码示例

def test_get_code(self, session):
    # 1. 创建Mock的model对象,这是业务函数的依赖
    mock_model = Mock()
    # 2. 给model的execute方法设置返回值为你需要的列表
    mock_model.execute.return_value = ['123', '123', '123']
    # 3. 调用真正的业务函数execute_call,传入mock_model和测试用的payload
    # 这里payload可以根据实际需求传合适的值,比如空字典
    execute_call(mock_model, {})
    # 如果需要断言结果,建议给业务函数加上返回值:比如业务函数改成 return code
    # 此时可以添加断言:assert execute_call(mock_model, {}) == '123'

关键思路拆解

  1. 明确测试目标:你要测试的是execute_call的逻辑——调用model.execute(payload)后取返回列表的第一个元素。所以不能Mock这个函数本身,要Mock它的外部依赖。
  2. 正确Mock依赖:给model这个依赖创建Mock对象,然后给它的execute方法指定返回值为列表。这样当业务代码执行result = model.execute(payload)时,result就会是你设置的['123', '123', '123'],自然可以用result[0]正常取值。
  3. 调用真实业务函数:测试时要调用真正的execute_call,传入Mock的model,这样才能触发你要验证的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:56:47