From bbd3cf8f1ef1e91a8d6dac6411e18b4b9084abf5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Mar 2017 00:56:28 +0200 Subject: Fix ref cycles in TestCase.assertRaises() (#193) bpo-23890: unittest.TestCase.assertRaises() now manually breaks a reference cycle to not keep objects alive longer than expected. --- Lib/unittest/test/test_case.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Lib/unittest/test/test_case.py') diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index 8f752b8ae0..b849591505 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -1273,6 +1273,19 @@ test case with self.assertRaises(TypeError): self.assertRaises((ValueError, object)) + def testAssertRaisesRefcount(self): + # bpo-23890: assertRaises() must not keep objects alive longer + # than expected + def func() : + try: + raise ValueError + except ValueError: + raise ValueError + + refcount = sys.getrefcount(func) + self.assertRaises(ValueError, func) + self.assertEqual(refcount, sys.getrefcount(func)) + def testAssertRaisesRegex(self): class ExceptionMock(Exception): pass -- cgit v1.2.1