如何在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
相关产品推荐
相关产品推荐

