在子对象中模拟 return 值
Mocking a return value in a sub object
我想为复杂数据结构中的功能编写测试用例。该功能不依赖于所有数据,并且很难获得具有所需属性的真实实例。因此,我正在使用模拟。
def test_Case:
t1 = Timeseries(...) # Data
t2 = Timeseries(...) # Data
fancy_t1 = Mock(data=d1, additional_property= ...)
fancy_t2 = Mock(data=d2, additional_property= ...)
container = Mock(data_sets=[fancy_t1, fancy_t2])
ret = function_to_test(container)
assert ret ... # Some condition
在 function_to_test
中有一个形式为
的调用
container.aggregation.aggregate(fancy_t, more_arguments1, more_arguments2, ... )
我希望 aggregation.aggregate
调用执行的操作非常简单。它应该评估为 t1+t2
(时间序列)并忽略 fancy_t
和其他参数。
我该怎么做?
如果我这样做
agg = Mock()
agg.return_value = d1 + d2
container.aggregation.get_aggregated_positions = agg
它评估为 <Mock name='mock.aggregation.get_aggregated_positions()' id='296569680'>
而不是时间序列。
类似的东西有效:
from mock import patch
with patch('package.container.aggregation.get_aggregated_positions', return_value=_fake_fnc()):
ret = function_to_test(container)
assert ret ... # Some condition
def _fake_fnc():
return 0.0
我想为复杂数据结构中的功能编写测试用例。该功能不依赖于所有数据,并且很难获得具有所需属性的真实实例。因此,我正在使用模拟。
def test_Case:
t1 = Timeseries(...) # Data
t2 = Timeseries(...) # Data
fancy_t1 = Mock(data=d1, additional_property= ...)
fancy_t2 = Mock(data=d2, additional_property= ...)
container = Mock(data_sets=[fancy_t1, fancy_t2])
ret = function_to_test(container)
assert ret ... # Some condition
在 function_to_test
中有一个形式为
container.aggregation.aggregate(fancy_t, more_arguments1, more_arguments2, ... )
我希望 aggregation.aggregate
调用执行的操作非常简单。它应该评估为 t1+t2
(时间序列)并忽略 fancy_t
和其他参数。
我该怎么做?
如果我这样做
agg = Mock()
agg.return_value = d1 + d2
container.aggregation.get_aggregated_positions = agg
它评估为 <Mock name='mock.aggregation.get_aggregated_positions()' id='296569680'>
而不是时间序列。
类似的东西有效:
from mock import patch
with patch('package.container.aggregation.get_aggregated_positions', return_value=_fake_fnc()):
ret = function_to_test(container)
assert ret ... # Some condition
def _fake_fnc():
return 0.0