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

如何mock requests.post返回值使其同时包含status_code和__dict__属性

问题原因

你在调用Mock构造函数时传入的__dict__参数,会被识别为普通自定义属性,而非覆盖Mock实例本身的特殊属性__dict__。而直接给mock_post.return_value.__dict__赋值时,会清空Mock实例原本的属性存储字典,导致提前设置的status_code丢失。

可行实现方案

方案1:直接将所需属性全部写入__dict__

赋值时把status_code也放入自定义的属性字典即可:

@patch("tests.requests.post", autospec=True)
def test_create_job(self, mock_post):
    mock_response = Mock()
    mock_response.__dict__ = {"status_code": 200, "a": "b"}
    mock_post.return_value = mock_response

方案2:通过标准属性赋值实现(更推荐)

Mock对象的自定义属性默认都会自动存入实例的__dict__中,不需要手动修改__dict__:

@patch("tests.requests.post", autospec=True)
def test_create_job(self, mock_post):
    mock_response = Mock()
    # 直接赋值的属性会自动进入__dict__
    mock_response.status_code = 200
    mock_response.a = "b"
    mock_post.return_value = mock_response

方案3:模拟真实requests.Response结构(可选)

如果需要更贴合真实返回的属性校验,可以用spec绑定requests的Response类:

from requests import Response

@patch("tests.requests.post", autospec=True)
def test_create_job(self, mock_post):
    mock_response = Mock(spec=Response)
    mock_response.status_code = 200
    mock_response.a = "b"
    mock_post.return_value = mock_response

以上三种方案都可以同时满足返回值携带status_code属性,且__dict__中包含对应自定义键值的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:05