[英]Mock property method on class
我有以下數據類:
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'
有沒有辦法可以使用包含對數據類的引用的綁定方法來模擬屬性?
您可以編寫自己的屬性模擬,在__get__
中執行您想要的__get__
:
class MyMock(mock.PropertyMock):
def __get__(self, obj, obj_type=None):
return _unbound(obj)
def test_unbound():
with mock.patch("__main__.Foo.qux", new=MyMock()):
foo = Foo(bar="a", baz="b")
assert foo.qux == "b"
問題是將正確的對象獲取到_unbound
。
必須有一種更清潔的方法來實現這一目標,盡管我沒有看到......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.