使用MagicMock作为自己的返回值?

时间:2018-08-20 22:24:55

标签: python testing mocking

通常,MagicMock会针对调用的任何属性或方法返回新的MagicMocks:

>>> mm = MagicMock()
>>> mm
<MagicMock id='140094558921616'>
>>> mm()
<MagicMock name='mock()' id='140094551215016'>
>>> mm.foo()
<MagicMock name='mock.foo()' id='140094551605656'>

最近,我一直在编写固定装置,它们为模拟类上的所有方法和属性返回相同的模拟物:

>>> mm = MagicMock()
>>> mm.return_value = mm
>>> mm.foo.return_value = mm
>>> mm
<MagicMock id='140094551638984'>
>>> mm()
<MagicMock id='140094551638984'>
>>> mm.foo()
<MagicMock id='140094551638984'>

这很方便,因为我的装置可以简单地产生单个模拟,并且可以针对它运行多个断言。我还没有看到任何缺点:calledcall_countcall_args属性对于每个模拟属性仍然可以正常工作。

但是,MagicMock不能以这种开箱即用的方式工作的事实使我觉得我可能会丢失一些东西。

这是个坏主意吗?

0 个答案:

没有答案