python - Python:如何实现多个动态mock.patch函数?
问题描述
我正在尝试在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 属性错误:输入
显然,这不是根据配置模拟多个属性的适当方法,如上所示?有人可以告诉我如何最好地实现这一目标,谢谢!
解决方案
最简单的选择是使用contextlib.ExitStack
:https ://docs.python.org/3/library/contextlib.html#supporting-a-variable-number-of-context-managers
另一种选择是使用 pytest 的monkeypatch
夹具:https ://docs.pytest.org/en/latest/monkeypatch.html
推荐阅读
- git - 如何找到包含我的提交/树/blob/delta 的包文件?
- graphics - FilledCurve 中不需要的线(Wolfram Mathematica)
- google-cloud-run - 将默认的 302 HTTP->HTTPS 重定向更改为 301
- bash - MacBook Pro ZSH 终端提示
- javascript - 如何正确使用 Laravel 和 Vue?
- java - 在 Recyclerview 中更改 Edittext 的 IME 选项
- mysql - Airflow MySql 连接问题
- python - 来自 Python 和 Selenium 中的函数的 send_keys
- php - 加密波斯消息
- mysql - 如何在 SQL 中为相同的 AgentID 选择下一个日期时间