如何使用 PropertyMock 模拟嵌套属性
How to mock nested properties with PropertyMock
我正在尝试从库函数 mlflow.get_run(run_id).data.metrics
的 return 值模拟 属性 的 属性。我知道如何像这样模拟单层:
m = mock.MagicMock(spec_set=mlflow.get_run)
type(m).metrics = mock.PropertyMock(side_effect=[1, 2])
print(m.metrics)
print(m.metrics)
###output
1
2
如果我模拟嵌套的 属性 虽然我得到错误“MagicMock 没有属性 'data'”
type(m).data.metrics = mock.PropertyMock(side_effect=[1, 2])
模拟嵌套属性的正确方法是什么?
您需要基本上重复您对 m
和 data
所做的操作。将 data
属性 的 return_value
设置为另一个 MagickMock
然后将其类型设置为 PropertyMock
.
from unittest import mock
m = mock.MagicMock(spec_set=mlflow.get_run)
type(m).data = mock.PropertyMock(return_value=mock.MagicMock())
type(type(m).data).metrics = mock.PropertyMock(side_effect=[1, 2])
print(m.data.metrics)
# 1
print(m.data.metrics)
# 2
我正在尝试从库函数 mlflow.get_run(run_id).data.metrics
的 return 值模拟 属性 的 属性。我知道如何像这样模拟单层:
m = mock.MagicMock(spec_set=mlflow.get_run)
type(m).metrics = mock.PropertyMock(side_effect=[1, 2])
print(m.metrics)
print(m.metrics)
###output
1
2
如果我模拟嵌套的 属性 虽然我得到错误“MagicMock 没有属性 'data'”
type(m).data.metrics = mock.PropertyMock(side_effect=[1, 2])
模拟嵌套属性的正确方法是什么?
您需要基本上重复您对 m
和 data
所做的操作。将 data
属性 的 return_value
设置为另一个 MagickMock
然后将其类型设置为 PropertyMock
.
from unittest import mock
m = mock.MagicMock(spec_set=mlflow.get_run)
type(m).data = mock.PropertyMock(return_value=mock.MagicMock())
type(type(m).data).metrics = mock.PropertyMock(side_effect=[1, 2])
print(m.data.metrics)
# 1
print(m.data.metrics)
# 2