我试图从一个类中修补一个属性,在 SO 中进行了大量搜索后,我明白只有类属性“可以”被修补。如果我想修补对象属性,我必须“创建”它们(在修补程序中使用
create=True
选项)。
例子:
class A:
def __init__(self):
self._a = 5
class B(A):
def ok(self):
a = A()
print(a._a)
def test(mocker):
mocker.patch("test_scratch.A._a", return_value=3)
这个例子使用了pytest-mock。
使用
pytest
运行此命令,在名为 test_scratch.py
的文件中会导致以下错误:
AttributeError:
没有属性 '_a'
我明白这是为什么,但是在阅读了文档之后,我无法在任何地方找到这个解释。这让我更想知道我错过了多少(即,我飞越了多少相关细节)。
那么,这种行为记录在哪里?
我会说它在第一段中是明确的文件。
在函数体或 with 语句中,目标被新对象修补。
从这句话我明白
patch
将在一个已经存在的引用中设置一个对象。
您正在尝试将特定值放入不存在的变量中。