如何通过 side_effecting 其属性模拟对象列表
How to mock a list of objects by side_effecting its attribute
我想对以下函数进行单元测试,该函数将 RunInfo 个对象列表作为参数。
def get_mses(runs):
mse = []
for r in runs:
metrics = mlflow.get_run(r.run_id).data.metrics
mse.append(metrics['cv_mse'])
return mse
虽然主要逻辑围绕 metrics
,但确实需要迭代 runs
并获取属性 run_id
以检索有关每个 运行 的信息。但是我认为我不需要模拟实际的 RunInfo
class,而是模拟一些具有属性 run_id
的假 class。如何通过使用 side_effects
?
将 run_ids 指定为简单的 (1, 2, 3) 来模拟它并创建对象列表
我找到了这个 post,但这并不是我想要做的。
您不必为此目的使用 side_effects
。 unittest.mock
有一个 NonCallableMock
class 可以包含任意属性。
from unittest import mock
runs = [mock.NonCallableMock(run_id=i) for i in range(1,4)]
我想对以下函数进行单元测试,该函数将 RunInfo 个对象列表作为参数。
def get_mses(runs):
mse = []
for r in runs:
metrics = mlflow.get_run(r.run_id).data.metrics
mse.append(metrics['cv_mse'])
return mse
虽然主要逻辑围绕 metrics
,但确实需要迭代 runs
并获取属性 run_id
以检索有关每个 运行 的信息。但是我认为我不需要模拟实际的 RunInfo
class,而是模拟一些具有属性 run_id
的假 class。如何通过使用 side_effects
?
我找到了这个 post,但这并不是我想要做的。
您不必为此目的使用 side_effects
。 unittest.mock
有一个 NonCallableMock
class 可以包含任意属性。
from unittest import mock
runs = [mock.NonCallableMock(run_id=i) for i in range(1,4)]