1 回答

TA貢獻1833條經(jīng)驗 獲得超4個贊
autospec規(guī)范通常用于定義 API。使用 a 時Mock,您幾乎可以調用或訪問其上的任何屬性,它只會讓您使用。不過它會返回另一個模擬對象。
看到這樣的事情:
>>> my_mock = Mock()
>>> my_mock.stuff
<Mock name='mock.stuff' id='139870989908344'>
>>> my_mock.junk()
<Mock name='mock.junk()' id='139870987197912'>
如果我定義了一個規(guī)范,它會說你不能訪問真實類中實際上不存在的東西。像這樣:
>>> 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。繼續(xù)將它添加到您的補丁裝飾器中,您應該一切就緒。它應該是這樣的:
@patch('xx.user_data', autospec=test_user_data, spec_set=True, return_value=test_user_data)
添加回答
舉報