[issue36598] mock side_effect should be checked for iterable not callable
Karthikeyan Singaravelan
report at bugs.python.org
Thu Apr 11 02:07:46 EDT 2019
Karthikeyan Singaravelan <tir.karthi at gmail.com> added the comment:
I am not sure if the snippets you are referring to are from testing-cabal/mock repo which could be different from master branch. Current code is at [0]
if effect is not None:
if _is_exception(effect):
raise effect
elif not _callable(effect):
result = next(effect)
if _is_exception(result):
raise result
else:
result = effect(*args, **kwargs)
if result is not DEFAULT:
return result
> This works correctly for iterables (such as lists) that are not defined as generators.
However, if one defined a generator as a function this would not work.
This does seem to work for generator function as below. Sorry, maybe I am getting it wrong with respect to terminologies and understanding the issue. Can you add a short script around what you are expecting?
$ cat ../backups/bpo36598.py
from unittest.mock import patch
def gen(i):
while i < 5:
yield i
i += 1
def foo():
return 1
with patch('__main__.foo', side_effect=gen(0)):
for _ in range(2):
print(foo())
for _ in range(2):
print(foo())
$ ./python.exe ../backups/bpo36598.py
0
1
2
3
[0] https://github.com/python/cpython/blob/a9bd8925c7fa50dd3cfab125b824ec192133ef49/Lib/unittest/mock.py#L1043
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue36598>
_______________________________________
More information about the Python-bugs-list
mailing list