У меня есть следующий класс данных:
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)
Я пробовал различные комбинации new_callable
, new
, et c. при создании объекта patch
, но я вижу:
TypeError: _unbound() missing 1 required positional argument: 'self'
Есть ли способ смоделировать свойство с помощью связанного метода, содержащего ссылку на класс данных?