我有一个返回对象的函数调用:
r = Foo(x,y)
where r
具有丰富的嵌套属性集。例如,我可以访问r.prop_a.prop_b.prop_c
。我想嘲笑Foo
,这样特定的叶子属性r
被修改,即使得r.prop_a.prop_b.prop_c
返回一个在我控制下的值:
>> r = Foo(x,y)
>> r.prop_a.prop_b.prop_c
'fish'
>> # some mock magic patching of Foo is taking place here
>> r = Foo(x,y)
>> r.prop_a.prop_b.prop_c
'my_fish'
我不太关心中间属性。
有没有一种优雅的方式来模拟嵌套属性mock http://www.voidspace.org.uk/python/mock/index.html?
按照您的预期替换模拟对象的属性调用:
>> r1 = r_original(x, y)
>> r1.prop_a.prop_b.prop_c
'fish'
>> returner = mock.MagicMock()
>> returner.prop_a.prop_b.prop_c = 'fish'
>> r_mocked = mock.MagicMock(spec_set=r_original, return_value=returner)
>> r2 = r_mocked(x, y)
>> r2.prop_a.prop_b
MagicMock name='returner.prop_a.prop_b' id='87412560'>
>> r2.prop_a.prop_b.prop_c
'fish'
这使您可以在定义特定值时发挥全部模拟功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)