diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2023-09-12 13:33:30 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-12 13:33:30 (GMT) |
commit | 66d1d7eb067d445f1ade151f4a6db3864dd9109f (patch) | |
tree | abce6d84d57060e7eb8ddd438063aff4d5d48ab2 /Lib/unittest | |
parent | d13f782a181d579fc3c23ea6059ff352ec9fab93 (diff) | |
download | cpython-66d1d7eb067d445f1ade151f4a6db3864dd9109f.zip cpython-66d1d7eb067d445f1ade151f4a6db3864dd9109f.tar.gz cpython-66d1d7eb067d445f1ade151f4a6db3864dd9109f.tar.bz2 |
gh-84867: Do not load tests from TestCase and FunctionTestCase (GH-100497)
Diffstat (limited to 'Lib/unittest')
-rw-r--r-- | Lib/unittest/loader.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index 678d627..9a3e5cc 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -84,9 +84,13 @@ class TestLoader(object): raise TypeError("Test cases should not be derived from " "TestSuite. Maybe you meant to derive from " "TestCase?") - testCaseNames = self.getTestCaseNames(testCaseClass) - if not testCaseNames and hasattr(testCaseClass, 'runTest'): - testCaseNames = ['runTest'] + if testCaseClass in (case.TestCase, case.FunctionTestCase): + # We don't load any tests from base types that should not be loaded. + testCaseNames = [] + else: + testCaseNames = self.getTestCaseNames(testCaseClass) + if not testCaseNames and hasattr(testCaseClass, 'runTest'): + testCaseNames = ['runTest'] loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames)) return loaded_suite @@ -95,7 +99,11 @@ class TestLoader(object): tests = [] for name in dir(module): obj = getattr(module, name) - if isinstance(obj, type) and issubclass(obj, case.TestCase): + if ( + isinstance(obj, type) + and issubclass(obj, case.TestCase) + and obj not in (case.TestCase, case.FunctionTestCase) + ): tests.append(self.loadTestsFromTestCase(obj)) load_tests = getattr(module, 'load_tests', None) @@ -164,7 +172,11 @@ class TestLoader(object): if isinstance(obj, types.ModuleType): return self.loadTestsFromModule(obj) - elif isinstance(obj, type) and issubclass(obj, case.TestCase): + elif ( + isinstance(obj, type) + and issubclass(obj, case.TestCase) + and obj not in (case.TestCase, case.FunctionTestCase) + ): return self.loadTestsFromTestCase(obj) elif (isinstance(obj, types.FunctionType) and isinstance(parent, type) and |