mirror of https://github.com/python/cpython.git
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:
parent
d15b9f19ac
commit
c2102136be
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue