Closes issue 14636. mock objects raise exceptions from an iterable side_effect
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 8cedcb4..8378b0f 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -891,7 +891,10 @@
raise effect
if not _callable(effect):
- return next(effect)
+ result = next(effect)
+ if _is_exception(result):
+ raise result
+ return result
ret_val = effect(*args, **kwargs)
if ret_val is DEFAULT:
@@ -931,8 +934,9 @@
arguments as the mock, and unless it returns `DEFAULT`, the return
value of this function is used as the return value.
- Alternatively `side_effect` can be an exception class or instance. In
- this case the exception will be raised when the mock is called.
+ If `side_effect` is an iterable then each call to the mock will return
+ the next value from the iterable. If any of the members of the iterable
+ are exceptions they will be raised instead of returned.
If `side_effect` is an iterable then each call to the mock will return
the next value from the iterable.