changeset: 96907:db825807ab04 user: Robert Collins date: Tue Jul 14 13:51:40 2015 +1200 files: Lib/unittest/mock.py Lib/unittest/test/testmock/testmock.py Misc/ACKS Misc/NEWS description: Issue #23661: unittest.mock side_effects can now be exceptions again. This was a regression vs Python 3.4. Patch from Ignacio Rossi diff -r b9e3838e9664 -r db825807ab04 Lib/unittest/mock.py --- a/Lib/unittest/mock.py Mon Jul 13 21:01:39 2015 +0100 +++ b/Lib/unittest/mock.py Tue Jul 14 13:51:40 2015 +1200 @@ -506,7 +506,8 @@ if delegated is None: return self._mock_side_effect sf = delegated.side_effect - if sf is not None and not callable(sf) and not isinstance(sf, _MockIter): + if (sf is not None and not callable(sf) + and not isinstance(sf, _MockIter) and not _is_exception(sf)): sf = _MockIter(sf) delegated.side_effect = sf return sf diff -r b9e3838e9664 -r db825807ab04 Lib/unittest/test/testmock/testmock.py --- a/Lib/unittest/test/testmock/testmock.py Mon Jul 13 21:01:39 2015 +0100 +++ b/Lib/unittest/test/testmock/testmock.py Tue Jul 14 13:51:40 2015 +1200 @@ -173,6 +173,15 @@ self.assertEqual([mock(), mock(), mock()], [3, 2, 1], "callable side effect not used correctly") + def test_autospec_side_effect_exception(self): + # Test for issue 23661 + def f(): + pass + + mock = create_autospec(f) + mock.side_effect = ValueError('Bazinga!') + self.assertRaisesRegex(ValueError, 'Bazinga!', mock) + @unittest.skipUnless('java' in sys.platform, 'This test only applies to Jython') def test_java_exception_side_effect(self): diff -r b9e3838e9664 -r db825807ab04 Misc/ACKS --- a/Misc/ACKS Mon Jul 13 21:01:39 2015 +0100 +++ b/Misc/ACKS Tue Jul 14 13:51:40 2015 +1200 @@ -1582,3 +1582,4 @@ Gennadiy Zlobin Doug Zongker Peter Åstrand +Ignacio Rossi diff -r b9e3838e9664 -r db825807ab04 Misc/NEWS --- a/Misc/NEWS Mon Jul 13 21:01:39 2015 +0100 +++ b/Misc/NEWS Tue Jul 14 13:51:40 2015 +1200 @@ -17,6 +17,9 @@ for patterns that starts with capturing groups. Fast searching optimization now can't be disabled at compile time. +- Issue #23661: unittest.mock side_effects can now be exceptions again. This + was a regression vs Python 3.4. Patch from Ignacio Rossi + What's New in Python 3.5.0 beta 4? ==================================