Ignacio Rossi added the comment:

The problem only affects autospecced functions.

Apparently, the problem lies here (all code excerpts from Lib/unittest/mock.py):

- When autospeccing functions, the Mock._mock_delegate field is populated at 
the end of _setup_func (and its the only place I found where the delegate is 
set):

197 def _setup_func(funcopy, mock):
[...]
237     mock._mock_delegate = funcopy

- Mock.side_effect is a property, and proxies the get/set to _mock_delegate 
when it exists, and on the way out does not detect the exception and tries to 
make an _IterMock out of it and everything explodes.

 504     def __get_side_effect(self):
 505         delegated = self._mock_delegate
 506         if delegated is None:
 507             return self._mock_side_effect
 508         sf = delegated.side_effect
 509         if sf is not None and not callable(sf) and not isinstance(sf, 
_MockIter):
 510             sf = _MockIter(sf)

I've attached a patch which adds a test for this use case, and a proposed fix. 
Hope it helps :)

----------
keywords: +patch
Added file: http://bugs.python.org/file38479/autospec_exception.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23661>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to