gh-99645: Fix a bug in handling class cleanups in unittest.TestCase (GH-99646)

Now addClassCleanup() uses separate lists for different TestCase subclasses,
and doClassCleanups() only cleans up the particular class.
This commit is contained in:
Serhiy Storchaka 2022-11-22 17:49:37 +02:00 committed by GitHub
parent d15b9f19ac
commit c2102136be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 5 deletions

View File

@ -547,6 +547,33 @@ def testNothing(self):
self.assertEqual(TestableTest._class_cleanups, [])
def test_run_nested_test(self):
ordering = []
class InnerTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
ordering.append('inner setup')
cls.addClassCleanup(ordering.append, 'inner cleanup')
def test(self):
ordering.append('inner test')
class OuterTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
ordering.append('outer setup')
cls.addClassCleanup(ordering.append, 'outer cleanup')
def test(self):
ordering.append('start outer test')
runTests(InnerTest)
ordering.append('end outer test')
runTests(OuterTest)
self.assertEqual(ordering, [
'outer setup', 'start outer test',
'inner setup', 'inner test', 'inner cleanup',
'end outer test', 'outer cleanup'])
class TestModuleCleanUp(unittest.TestCase):
def test_add_and_do_ModuleCleanup(self):

View File

@ -384,11 +384,11 @@ class TestCase(object):
# of difflib. See #11763.
_diffThreshold = 2**16
def __init_subclass__(cls, *args, **kwargs):
# Attribute used by TestSuite for classSetUp
_classSetupFailed = False
_class_cleanups = []
cls._classSetupFailed = False
cls._class_cleanups = []
super().__init_subclass__(*args, **kwargs)
def __init__(self, methodName='runTest'):
"""Create an instance of the class that will use the named test

View File

@ -0,0 +1,3 @@
Fix a bug in handling class cleanups in :class:`unittest.TestCase`. Now
``addClassCleanup()`` uses separate lists for different ``TestCase``
subclasses, and ``doClassCleanups()`` only cleans up the particular class.