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

Unittest mock的return_value不同场景表现不一致,原因是什么?

Python unittest mock 中 return_value 生效逻辑差异说明

核心本质

所有差异都来自于你mock的层级是否匹配代码实际的调用链路:
实际代码的调用逻辑是两级:

  1. 调用requests.get(url)函数,得到响应对象
  2. 读取该响应对象的status_code属性

第一个示例运行正常的原因

你的被测函数直接返回requests.get(url)的结果,你用patch('requests.get', return_value='Hello World!')直接给requests.get函数的调用返回值设为了固定字符串,完全匹配调用逻辑,所以断言通过。

第二个示例运行报错的原因

你写的requests.get.status_code.return_value = 200是给**requests.get这个Mock函数对象本身**加了status_code属性的返回规则,但实际代码根本不会读取requests.get.status_code,只会读取requests.get(url)(也就是函数调用后返回的新Mock对象)的status_code属性,这个属性你没有做任何赋值,所以返回的是默认生成的Mock实例,和预期的200不匹配,触发报错。

调整后示例运行正常的原因

mock_request.return_value对应的就是requests.get(url)调用后返回的结果对象,你直接给这个结果对象的status_code属性赋值为200,完全匹配实际代码的调用链路,所以断言通过。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:06:02