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

为含autospec依赖的对象添加类型提示的解决方案问询

问题:autospec模拟依赖时的类型提示痛点

我在为带依赖的控制器对象编写测试,为避免实例化数据库连接这类依赖,用create_autospec模拟InterfaceB。

控制器代码

class A:
    def __init__(self, some_dependency: InterfaceB):
        self.some_dependency: InterfaceB = some_dependency

    def do_thing(self, x):
        self.some_dependency.do_subtask(necessary_data=x)

测试代码

def test_do_thing():
    a: A = A(some_dependency=create_autospec(InterfaceB))
    a.do_thing(1)
    assert a.some_dependency.do_subtask.called_with(necessary_data=1)

问题描述

代码补全/检查工具(如PyCharm)会报错,认为do_subtask是普通函数,不存在called_with属性。必须通过cast转换才能消除报错:

do_subtask: Mock = cast(Mock, a.some_dependency.do_subtask)
assert do_subtask.called_with(necessary_data=1)

但这种方式在多依赖或需调用依赖多个方法的场景下非常繁琐,违反DRY原则。

解决方案需求(按优先级排序)

  • 自动识别A的类型,且其所有autospec依赖的方法均为Mock类型;
  • 通过类型提示标识变量为某类型的autospec,即拥有该类型全部方法但实际为Mock对象;
  • 向PyCharm检查工具声明Mock的更简洁方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:25:41