From 8b2cd75bdd22c2770960f186fb945b5de1eca524 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Sun, 7 Apr 2013 16:42:24 +0300 Subject: [PATCH] Process DEFAULT values in mock side_effect that returns iterator. Patch by Michael Ford. --- Lib/unittest/mock.py | 2 ++ Lib/unittest/test/testmock/testmock.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 57bf957a98e..073869a1f12 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -904,6 +904,8 @@ class CallableMixin(Base): result = next(effect) if _is_exception(result): raise result + if result is DEFAULT: + result = self.return_value return result ret_val = effect(*args, **kwargs) diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py index 2c6f1289758..3d0776c16fb 100644 --- a/Lib/unittest/test/testmock/testmock.py +++ b/Lib/unittest/test/testmock/testmock.py @@ -906,6 +906,10 @@ class MockTest(unittest.TestCase): self.assertRaises(StopIteration, mock) self.assertIs(mock.side_effect, this_iter) + def test_side_effect_iterator_default(self): + mock = Mock(return_value=2) + mock.side_effect = iter([1, DEFAULT]) + self.assertEqual([mock(), mock()], [1, 2]) def test_assert_has_calls_any_order(self): mock = Mock()