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

如何在pytest中用mocker为函数原结果添加side_effect

解决方案

要实现先调用原函数获取结果、再将结果传入side_effect处理的需求,你需要自定义一个副作用函数,在内部先调用原函数,再把原结果传给modify处理。具体实现如下:

修改后的测试代码

def test_fnc():
    # 获取原函数的引用(路径需与patch目标完全一致)
    original_otherfnc = app.path.otherfnc
    
    # 自定义副作用函数:先执行原函数拿到结果,再传入处理函数
    def custom_side_effect():
        original_result = original_otherfnc()
        return modify(original_result)
    
    # 将自定义函数作为side_effect传入patch
    mocker.patch('app.path.otherfnc', side_effect=custom_side_effect)
    
    result = fnc()
    assert result == "6"

原问题原因说明

你之前直接将modify设为side_effect的问题在于:

  • mocker.patch会用MagicMock直接替换原函数,原函数不会被执行
  • modify需要接收一个参数,但被替换后的otherfnc是无参调用,导致modify无法获取原函数的返回值,甚至会因参数缺失报错

通过自定义副作用函数,我们手动触发原函数的执行,再将结果传递给处理函数,就能实现预期的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:45:49