一、 试试Mock,找点感觉
Mock和MagicMock对象的一大特点是:当你访问Mock对象的一个属性或者方法的时候,Mock对象会创建新的Mock对象绑定在该属性或者方法上。
看下面的运行结果
m = Mock()
In [14]: dir(m)
Out[14]:
['assert_any_call',
'assert_called',
'assert_called_once',
'assert_called_once_with',
'assert_called_with',
'assert_has_calls',
'assert_not_called',
'attach_mock',
'call_args',
'call_args_list',
'call_count',
'called',
'configure_mock',
'method_calls',
'mock_add_spec',
'mock_calls',
'reset_mock',
'return_value',
'side_effect']
# -------------------------
In [15]: m.foo #注意,此处没有报错,比如属性不存在之类的错误
Out[15]: <Mock name='mock.foo' id='140455918830032'>
dir(m)
Out[16]:
['assert_any_call',
'assert_called',
'assert_called_once',
'assert_called_once_with',
'assert_called_with',
'assert_has_calls',
'assert_not_called',
'attach_mock',
'call_args',
'call_args_list',
'call_count',
'called',
'configure_mock',
'foo', ## 注意到多了这个属性
'method_calls',
'mock_add_spec',
'mock_calls',
'reset_mock',
'return_value',
'side_effect']
# ---------