diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-11-13 16:10:13 +0000 |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-11-13 16:10:13 +0000 |
commit | 92a653af95524525abf0bc6f5f08fa08dc714ab0 (patch) | |
tree | d90de5af59428c5632b05ffd0a91479ca1451c14 | |
parent | 0daed996e7a0e9a3a4a524fe7cd519010bc77433 (diff) | |
download | cpython-git-92a653af95524525abf0bc6f5f08fa08dc714ab0.tar.gz |
Merged revisions 74556 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74556 | kristjan.jonsson | 2009-08-27 22:20:21 +0000 (fim., 27 ßg·. 2009) | 2 lines
issue 6275
Add an "exc_value" attribute to the _AssertRaisesContext context manager in the unittest package. This allows further tests on the exception that was raised after the context manager exits.
........
-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 |