1 回答
TA贡献1833条经验 获得超4个赞
autospec规范通常用于定义 API。使用 a 时Mock,您几乎可以调用或访问其上的任何属性,它只会让您使用。不过它会返回另一个模拟对象。
看到这样的事情:
>>> my_mock = Mock()
>>> my_mock.stuff
<Mock name='mock.stuff' id='139870989908344'>
>>> my_mock.junk()
<Mock name='mock.junk()' id='139870987197912'>
如果我定义了一个规范,它会说你不能访问真实类中实际上不存在的东西。像这样:
>>> my_mock = Mock(spec=xx.user_data)
>>> my_mock.stuff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.4/unittest/mock.py", line 574, in __getattr__
raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute 'stuff'
>>> my_mock.scale
<Mock name='mock.scale' id='139871128095264'>
因此,上面显示您无法访问 Mock 上未在实际user_data类中定义的属性,因为我使用了 spec。
这解释了 autospec 的工作原理,但您真正想要的是return_valuearg。继续将它添加到您的补丁装饰器中,您应该一切就绪。它应该是这样的:
@patch('xx.user_data', autospec=test_user_data, spec_set=True, return_value=test_user_data)
添加回答
举报