From 22e162f462b7f883b65d13c3462325c4fd163dc0 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 29 Mar 2013 17:55:24 +0100 Subject: [PATCH] Fix bug in TestResult.addSubTest() --- Lib/unittest/result.py | 2 +- Lib/unittest/test/test_result.py | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py index eec4f211730..f3f4b676a30 100644 --- a/Lib/unittest/result.py +++ b/Lib/unittest/result.py @@ -134,7 +134,7 @@ class TestResult(object): errors = self.failures else: errors = self.errors - errors.append((test, self._exc_info_to_string(err, test))) + errors.append((subtest, self._exc_info_to_string(err, test))) self._mirrorOutput = True def addSuccess(self, test): diff --git a/Lib/unittest/test/test_result.py b/Lib/unittest/test/test_result.py index fed17621ff0..6dd9bb0f9e8 100644 --- a/Lib/unittest/test/test_result.py +++ b/Lib/unittest/test/test_result.py @@ -227,6 +227,40 @@ class Test_TestResult(unittest.TestCase): self.assertTrue(test_case is test) self.assertIsInstance(formatted_exc, str) + def test_addSubTest(self): + class Foo(unittest.TestCase): + def test_1(self): + nonlocal subtest + with self.subTest(foo=1): + subtest = self._subtest + try: + 1/0 + except ZeroDivisionError: + exc_info_tuple = sys.exc_info() + # Register an error by hand (to check the API) + result.addSubTest(test, subtest, exc_info_tuple) + # Now trigger a failure + self.fail("some recognizable failure") + + subtest = None + test = Foo('test_1') + result = unittest.TestResult() + + test.run(result) + + self.assertFalse(result.wasSuccessful()) + self.assertEqual(len(result.errors), 1) + self.assertEqual(len(result.failures), 1) + self.assertEqual(result.testsRun, 1) + self.assertEqual(result.shouldStop, False) + + test_case, formatted_exc = result.errors[0] + self.assertIs(test_case, subtest) + self.assertIn("ZeroDivisionError", formatted_exc) + test_case, formatted_exc = result.failures[0] + self.assertIs(test_case, subtest) + self.assertIn("some recognizable failure", formatted_exc) + def testGetDescriptionWithoutDocstring(self): result = unittest.TextTestResult(None, True, 1) self.assertEqual(