如何用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'
关键思路拆解
- 明确测试目标:你要测试的是
execute_call的逻辑——调用model.execute(payload)后取返回列表的第一个元素。所以不能Mock这个函数本身,要Mock它的外部依赖。 - 正确Mock依赖:给
model这个依赖创建Mock对象,然后给它的execute方法指定返回值为列表。这样当业务代码执行result = model.execute(payload)时,result就会是你设置的['123', '123', '123'],自然可以用result[0]正常取值。 - 调用真实业务函数:测试时要调用真正的
execute_call,传入Mock的model,这样才能触发你要验证的逻辑。
内容的提问来源于stack exchange,提问作者npc
相关产品推荐
相关产品推荐

