diff options
-rw-r--r-- | Doc/library/unittest.rst | 7 | ||||
-rw-r--r-- | Lib/test/test_unittest.py | 15 | ||||
-rw-r--r-- | Lib/unittest/case.py | 3 |
3 files changed, 25 insertions, 0 deletions
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 984ec272da..c6a64053db 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -891,12 +891,19 @@ Test cases with self.failUnlessRaises(some_error_class): do_something() + The context manager will store the caught exception object in its + :attr:`exc_value` attribute. This can be useful if the intention + is to perform additional checks on the exception raised. + .. versionchanged:: 3.1 Added the ability to use :meth:`assertRaises` as a context manager. .. deprecated:: 3.1 :meth:`failUnlessRaises`. + .. versionchanged:: 3.1 + Added the :attr:`exc_value` attribute. + .. method:: assertRaisesRegexp(exception, regexp[, callable, ...]) diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py index 9cdca96f62..e33f31e7e4 100644 --- a/Lib/test/test_unittest.py +++ b/Lib/test/test_unittest.py @@ -2847,6 +2847,21 @@ test case self.assertRaisesRegexp, Exception, re.compile('^Expected$'), Stub) + def testAssertRaisesExcValue(self): + class ExceptionMock(Exception): + pass + + def Stub(foo): + raise ExceptionMock(foo) + v = "particular value" + + ctx = self.assertRaises(ExceptionMock) + with ctx: + Stub(v) + e = ctx.exc_value + self.assertTrue(isinstance(e, ExceptionMock)) + self.assertEqual(e.args[0], v) + def testSynonymAssertMethodNames(self): """Test undocumented method name synonyms. diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 79c4a7255b..ed17b6e5e2 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -116,6 +116,9 @@ class _AssertRaisesContext(object): if not issubclass(exc_type, self.expected): # let unexpected exceptions pass through return False + #store exception, without traceback, for later retrieval + self.exc_value = exc_value + self.exc_value.with_traceback(None) if self.expected_regex is None: return True |