如何使用PropertyMock模拟嵌套属性



我正试图根据库函数mlflow.get_run(run_id).data.metrics的返回值模拟属性的属性。我知道如何模拟这样的单层:

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])

模拟嵌套属性的正确方法是什么?

您需要基本上重复为mdata所做的操作。将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

最新更新