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

如何在pytest中仅Mock特定类实例的方法?

只Mock类的特定实例方法

要实现仅Mock指定实例的方法,无需修改类本身,直接对目标实例调用mocker.patch.object即可,这样只会影响该实例的方法,其他实例不受影响。

解决代码示例

修改你的测试代码如下:

import pytest

def the_mocked_method():
    pass

# 假设myInstance和myInstanceToMock是在测试前已创建的实例
myInstance = MyCustomClass()
myInstanceToMock = MyCustomClass()

def test_something(mocker):
    # 仅对myInstanceToMock实例的the_method进行Mock
    mocker.patch.object(myInstanceToMock, "the_method", new=the_mocked_method)
    
    # 验证效果:
    myInstance.the_method()  # 执行原类的方法逻辑
    myInstanceToMock.the_method()  # 执行Mock后的the_mocked_method

原理说明

  • 当你patch.object(MyCustomClass, "the_method")时,是修改了类的方法属性,所有通过该类创建的实例都会继承这个修改,导致所有实例的方法被Mock。
  • 而直接patch.object(目标实例, "the_method")时,是直接修改该实例自身的方法属性(写入实例的__dict__),优先级高于类的方法属性,只会影响这个特定实例,不会改变类本身或其他实例的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:24:18