[3.12] gh-84867: Do not load tests from TestCase and FunctionTestCase (GH-100497) (#109327)

gh-84867: Do not load tests from TestCase and FunctionTestCase (GH-100497)
(cherry picked from commit 66d1d7eb06)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2023-10-02 07:57:44 -07:00 committed by GitHub
parent a8431123c2
commit 2fb39f73ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 5 deletions

View file

@ -82,6 +82,22 @@ class Test_TestLoader(unittest.TestCase):
self.assertIsInstance(suite, loader.suiteClass)
self.assertEqual(list(suite), [Foo('runTest')])
# "Do not load any tests from `TestCase` class itself."
def test_loadTestsFromTestCase__from_TestCase(self):
loader = unittest.TestLoader()
suite = loader.loadTestsFromTestCase(unittest.TestCase)
self.assertIsInstance(suite, loader.suiteClass)
self.assertEqual(list(suite), [])
# "Do not load any tests from `FunctionTestCase` class."
def test_loadTestsFromTestCase__from_FunctionTestCase(self):
loader = unittest.TestLoader()
suite = loader.loadTestsFromTestCase(unittest.FunctionTestCase)
self.assertIsInstance(suite, loader.suiteClass)
self.assertEqual(list(suite), [])
################################################################
### /Tests for TestLoader.loadTestsFromTestCase
@ -103,6 +119,19 @@ class Test_TestLoader(unittest.TestCase):
expected = [loader.suiteClass([MyTestCase('test')])]
self.assertEqual(list(suite), expected)
# "This test ensures that internal `TestCase` subclasses are not loaded"
def test_loadTestsFromModule__TestCase_subclass_internals(self):
# See https://github.com/python/cpython/issues/84867
m = types.ModuleType('m')
# Simulate imported names:
m.TestCase = unittest.TestCase
m.FunctionTestCase = unittest.FunctionTestCase
loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(m)
self.assertIsInstance(suite, loader.suiteClass)
self.assertEqual(list(suite), [])
# "This method searches `module` for classes derived from TestCase"
#
# What happens if no tests are found (no TestCase instances)?