我尝试使用mock.create_autospec
创建一个带有name
kwarg的autospecc&d模拟器。但是,每当我设置TypeError
kwarg时,我都会收到name
个异常。
以下是一个例子:
>>> import mock
>>> def a():
... print "blah"
...
>>> a()
blah
>>> q = mock.create_autospec(a)
>>> q
<function a at 0x7f184ceb1938>
>>> q()
<MagicMock name='mock()' id='139742347069904'>
mock()
不是MagicMock
对象的描述性名称,所以我尝试为name
设置一个值:
>>> q = mock.create_autospec(a, name="a")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/mock.py", line 2186, in create_autospec
name=_name, **_kwargs)
TypeError: type object got multiple values for keyword argument 'name'
为什么会这样?当我尝试定期MagicMock
时,事情就好了:
>>> q = mock.MagicMock(name="a")
>>> q
<MagicMock name='a' id='139742346475088'>
答案 0 :(得分:0)
它看起来像提供和生成的名称冲突。可能它是一个错误,所以你应该尝试报告它。
还有另一种方法可以创建具有有意义名称的autospec&f模拟,但需要修补:
with mock.patch('__main__.a', autospec=True):
print(repr(a()))
# <MagicMock name='a()' id='140705539482000'>