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

如何简化测试中多层嵌套的Mock方法调用?

简化嵌套Mock调用的优雅写法

当然有更简洁的办法!你现在的代码重复创建Mock对象确实有点繁琐,正如Raymond Hettinger所说——“一定有更好的办法!”,而unittest.mock库本身就提供了链式设置return_value的能力,能帮你把冗余的代码大幅简化:

# 简化后的代码
my_obj.child_object = mock.Mock()
my_obj.child_object.meth1_call.return_value.meth2_call.return_value = custom_list

为什么这能行?

这里的核心逻辑是利用Mock对象的return_value属性:

  • 当你调用my_obj.child_object.meth1_call()时,实际上返回的就是my_obj.child_object.meth1_call.return_value这个Mock实例
  • 我们直接给这个返回对象的meth2_call.return_value赋值为custom_list,就等价于你之前手动层层创建Mock并赋值的逻辑,但写法简洁太多。

如果你的child_object是通过类属性(比如@property装饰的)而非直接赋值的方式访问,那你可能需要用mock.PropertyMock来配合,但从你的代码场景来看,直接用上面的链式写法就完全满足需求了。

内容的提问来源于stack exchange,提问作者Jürgen Gmach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:22:13