我正试图根据库函数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])
模拟嵌套属性的正确方法是什么?
您需要基本上重复为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