我试图在python中动态模拟/修补一个类的多个@property方法
class Dog():
...
@property
def size(self):
.....
@property
def breed(self):
.....
cases = [{"size":9, "breed":"doberman"}, {"size":2, "breed":"pug"}]
@pytest.mark.parametrize("case", list(cases.values()), ids=list(cases.keys()))
def test_properties(case):
dog = Dog()
mocks = ()
for m, v in case.items():
mocks += (mock.patch.object(dog, m, return_value=v),)
with mocks:
...
但是,我得到以下错误:
with mocks:
E AttributeError: enter
显然,这不是根据如上所示的配置模拟多个属性的合适方法?有人能告诉我如何最好地实现这一点,谢谢
除了亚历克斯的回答外,以下问题解决了:
最简单的方法是使用
contextlib.ExitStack
:https://docs.python.org/3/library/contextlib.html#supporting-a-variable-number-of-context-managers另一种选择是使用pytest的
monkeypatch
fixture:https://docs.pytest.org/en/latest/monkeypatch.html相关问题 更多 >
编程相关推荐