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

FastAPI Mock失效排查:patch未生效导致返回原始值

问题原因及解决方案

核心问题

你的Mock未生效,是因为Python导入机制导致的引用不匹配:

  • 在app.py中,你通过from app_dep import resp将resp函数的引用导入到了app模块的命名空间中
  • create函数调用的是这个本地引用,而非直接从app_dep模块调用
  • 你patch的是app_dep.resp,但app模块里的resp依然指向原函数,所以Mock不会生效

另外你代码里还有一个小错误:return_value={'name', 'mocked'}是集合类型,而你预期的是字典,要改成{'name': 'mocked'}。

解决方法

方法一:修改Mock的目标路径

直接patch app模块中的resp引用:

def test_create_item(mocker):
    mocker.patch(
        'app.resp',  # 目标改为app模块内的resp
        return_value={'name': 'mocked'}  # 修正为字典格式
    )
    r = client.post("/ehsan")
    print(r.json())

方法二:修改函数调用方式

通过模块引用调用resp,确保patch的目标和实际调用的是同一个对象:
修改app.py的导入和调用逻辑:

# 替换原导入语句
import app_dep

# 修改create函数
@app.post("/ehsan", status_code=status.HTTP_201_CREATED)
async def create():
    return app_dep.resp()  # 通过模块调用resp

此时原Mock代码(patch app_dep.resp)即可正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:11:32