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

Python单元测试:如何模拟多参数调用同一方法返回不同值

实现按入参返回对应mock值的方法

完全可以通过patch方式实现该需求,核心是使用side_effect属性而非固定的return_value:
side_effect支持传入可调用对象,每次被mock的方法被调用时,会将调用时传入的参数交给这个可调用对象处理,返回值就作为本次mock调用的返回结果,刚好匹配你需要的「根据入参返回对应预设值」的需求。

修改后的可运行代码示例如下:

my_test_dict = {'filename1': 3, 'filename2': 30, 'filename3': None}
with mock.patch.object(project, 'count_paras') as mock_count:
    # 用side_effect指定处理逻辑,根据入参匹配返回值
    mock_count.side_effect = lambda file_name: my_test_dict[file_name]
    project.process_files(my_test_dict.keys())
    
    # 后续可添加断言验证逻辑是否符合预期
    # 示例1:验证有效文件计数为2(filename3返回None不计入)
    assert project.n_valid_files == 2
    # 示例2:验证count_paras的调用次数、参数符合预期
    assert mock_count.call_count == 3
    mock_count.assert_any_call('filename1')
    mock_count.assert_any_call('filename2')
    mock_count.assert_any_call('filename3')

如果测试场景中可能出现my_test_dict不存在的key,也可以把lambda替换为更完善的处理函数,不存在时返回默认值或抛出异常,方便排查测试用例问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:54:07