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

Pytest中Mock内部调用函数使其返回传入值的正确方法

让Mock函数返回传入的参数(Pytest场景)

要让被Mock的add_one返回传入它的原参数,不能用固定的return_value,得用side_effect来指定动态返回逻辑——side_effect可以接收一个可调用对象,让它直接返回传入的参数即可。

修改后的测试代码如下:

from module import add_eleven
from unittest.mock import patch

def test_add_one():
    from module import add_one
    n = add_one(0)
    assert 1 == n

@patch('module.add_one')
def test_add_eleven(mock_add_one):
    # 让mock返回传入的第一个参数
    mock_add_one.side_effect = lambda x: x
    
    n = add_eleven(0)
    assert 10 == n

说明

  • side_effect的作用是替代固定返回值,这里用lambda函数直接返回传入的参数,这样不管add_one被传入什么数值,都会原封不动返回。
  • 这样add_eleven执行n = add_one(n)后,n的值不会改变,后续加10就能得到预期的10,符合断言要求。

如果要兼容多参数的场景,也可以写成更通用的形式:

mock_add_one.side_effect = lambda *args: args[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:55:59