创建具有名称值的autospec'd模拟

时间:2014-04-06 20:58:56

标签: python unit-testing mocking

我尝试使用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'>

1 个答案:

答案 0 :(得分:0)

它看起来像提供和生成的名称冲突。可能它是一个错误,所以你应该尝试报告它。

还有另一种方法可以创建具有有意义名称的autospec&f模拟,但需要修补:

with mock.patch('__main__.a', autospec=True):
    print(repr(a()))

# <MagicMock name='a()' id='140705539482000'>