summaryrefslogtreecommitdiffstats
path: root/Lib/unittest
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2023-09-12 13:33:30 (GMT)
committerGitHub <noreply@github.com>2023-09-12 13:33:30 (GMT)
commit66d1d7eb067d445f1ade151f4a6db3864dd9109f (patch)
treeabce6d84d57060e7eb8ddd438063aff4d5d48ab2 /Lib/unittest
parentd13f782a181d579fc3c23ea6059ff352ec9fab93 (diff)
downloadcpython-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.py22
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