Python 创建autospec';使用名称值进行模拟

Python 创建autospec';使用名称值进行模拟,python,unit-testing,mocking,Python,Unit Testing,Mocking,我正在尝试使用mock.create_autospec创建一个名为kwarg的autospecc'd mock。但是,每当我设置名称时,就会出现TypeError异常 下面是一个例子: >>> import mock >>> def a(): ... print "blah" ... >>> a() blah >>> q = mock.create_autospec(a) >>> q <funct

我正在尝试使用
mock.create_autospec
创建一个名为
kwarg的autospecc'd mock。但是,每当我设置
名称时,就会出现
TypeError
异常

下面是一个例子:

>>> import mock
>>> def a():
...  print "blah"
... 
>>> a()
blah
>>> q = mock.create_autospec(a)
>>> q
<function a at 0x7f184ceb1938>
>>> q()
<MagicMock name='mock()' id='139742347069904'>
为什么会发生这种情况?当我尝试制作一个常规的
MagicMock
时,一切都很顺利:

>>> q = mock.MagicMock(name="a")
>>> q
<MagicMock name='a' id='139742346475088'>
q=mock.MagicMock(name=“a”) >>>q
它看起来像是提供的名称和生成的名称之间的冲突。可能是一个bug,所以你应该尝试报告它

还有另一种方法可以使用有意义的名称创建autospec'd mock,但需要修补:

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

# <MagicMock name='a()' id='140705539482000'>
带有mock.patch(“\uuuu main\uuuuu.a”,autospec=True):
打印(repr(a())
# 

这似乎是不必要的迂回。我已经向他们的追踪者提交了一份错误报告。
with mock.patch('__main__.a', autospec=True):
    print(repr(a()))

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