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

如何在Python unittest中用自定义类Mock目标类而非实例?

解决unittest.patch用自定义类替换原类的问题

问题根源

你当前使用new_callable=B的方式是错误的:new_callable参数的作用是让patch调用传入的对象(这里是类B)生成一个实例,然后用这个实例去替换原类A。这就导致libutil.util.A被替换成了B的实例,当你执行A()时,本质是在调用一个对象,自然会抛出TypeError: 'B' object is not callable。

正确实现方式

要直接用类B替换类A,需要使用patch的new参数,直接传入B类本身,而不是让patch去创建实例:

@pytest.fixture(scope="session", autouse=True)
def mock_util():
    from tests.libraries.mocks.util import B

    with mock.patch('libutil.util.A', new=B, create=False) as util_mock:
        yield util_mock

验证效果

修改后,当你执行a = libutil.util.A()时,实际创建的是B类的实例:

  • 调用a.g()会返回"Hi from child"(B类重写的方法)
  • a.c的值为"parent"(继承自A类的属性)

完全符合你用B类Mock A类的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:47:24