]> granicus.if.org Git - python/commitdiff
Fix bug in TestResult.addSubTest()
authorAntoine Pitrou <solipsis@pitrou.net>
Fri, 29 Mar 2013 16:55:24 +0000 (17:55 +0100)
committerAntoine Pitrou <solipsis@pitrou.net>
Fri, 29 Mar 2013 16:55:24 +0000 (17:55 +0100)
Lib/unittest/result.py
Lib/unittest/test/test_result.py

index eec4f211730e6ebda5c23c970156c7a46860c875..f3f4b676a30f157cd75aa027c99f43bf79256213 100644 (file)
@@ -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):
index fed17621ff0b6099badca775a1f93d18dec8e880..6dd9bb0f9e8e1389af74610d7e616ce89b74a5ce 100644 (file)
@@ -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(