我有以下数据类:
from dataclasses import dataclass
@dataclass
class Foo:
bar: str
baz: str
@property
def qux(self) -> str:
return self.bar
我想在测试期间更改qux
的行为。我知道PropertyMock
,可以写下如下内容:
with mock.patch("__main__.Foo.qux", new_callable=mock.PropertyMock(return_value="test")):
foo = Foo(bar="a", baz="b")
print(foo.qux)
相反,我想替换属性方法(未修饰),类似于:
def _unbound(self) -> str:
return self.baz
with mock.patch("__main__.Foo.qux", new_callable=mock.PropertyMock(new=_unbound)):
foo = Foo(bar="a", baz="b")
print(foo.qux)
在创建patch
对象时,我尝试了new_callable
、new
等的各种组合,但我看到:
TypeError: _unbound() missing 1 required positional argument: 'self'
有没有一种方法可以用一个包含对数据类引用的绑定方法模拟一个属性
您可以编写自己的属性mock,在
__get__
中实现您想要的功能:问题是将正确的对象获取到
_unbound
。必须有一个更干净的方法来实现这一点,尽管我看不到
相关问题 更多 >
编程相关推荐