6
我想測試一個簡單的裝飾我寫道:蟒蛇模擬:@wraps(F)的問題
它看起來像這樣:
#utilities.py
import other_module
def decor(f):
@wraps(f)
def wrapper(*args, **kwds):
other_module.startdoingsomething()
try:
return f(*args, **kwds)
finally:
other_module.enddoingsomething()
return wrapper
然後,我用它測試的python-模擬:
#test_utilities.py
def test_decor(self):
mock_func = Mock()
decorated_func = self.utilities.decor(mock_func)
decorated_func(1,2,3)
self.assertTrue(self.other_module.startdoingsomething.called)
self.assertTrue(self.other_module.enddoingsomething.called)
mock_func.assert_called_with(1,2,3)
但它踢回:
Traceback (most recent call last):
File "test_utilities.py", line 25, in test_decor
decorated_func = Mock(wraps=self.utilities.decor(mock_func))
File "utilities.py", line 35, in decor
@wraps(f)
File "/usr/lib/python2.7/functools.py", line 33, in update_wrapper
setattr(wrapper, attr, getattr(wrapped, attr))
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 660, in __getattr__
raise AttributeError(name)
AttributeError: __name__
我知道functools.wraps()只是一個輔助包裝。所以如果我把它拿出來進行測試。
我可以通過functools.wraps()來玩Mock嗎?
的Python 2.7.3
是的,這就是我所做的。我不確定是否有嚴重的後果。如存在「適當」的價值。但測試通過了,所以我想沒有問題?! 似乎它在這裏被提出並關閉:https://code.google.com/p/mock/issues/detail?id=67 – powlo
@paulus_almighty:任何字符串值都可以。任何你可以在'function .__ name__'上使用的東西,只要類型是'str'就可以。 –
謝謝它可以很好地工作。 –