首先,从现象上看,Mock有的MagicMock都有,而MagicMock多了一些magic方法。
_mock = mock.Mock()
_magicmock = mock.MagicMock()
mock.__iter__ # error
_magicmock.__iter__ #<MagicMock name='mock.__iter__' id='4458398224'>
而且MagicMock是懒加载的,在没调用magic方法的时候,是不存在这个方法的。
>>> _magicmock = mock.MagicMock()
>>> dir(_magicmock)
['assert_any_call', 'assert_called', 'assert_called_once'...
>>> iter(_magicmock)
<listiterator object at 0x10e32e290>