summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2021-09-17 09:09:32 (GMT)
committerGitHub <noreply@github.com>2021-09-17 09:09:32 (GMT)
commitb2b035a949eff1dc54b5bafe2bc9ce72b4d24438 (patch)
tree778d425c06b781da36f0518a16cf4f8351564e14
parent773319545ba60577bc140aa46eac83b360240b7a (diff)
downloadcpython-b2b035a949eff1dc54b5bafe2bc9ce72b4d24438.zip
cpython-b2b035a949eff1dc54b5bafe2bc9ce72b4d24438.tar.gz
cpython-b2b035a949eff1dc54b5bafe2bc9ce72b4d24438.tar.bz2
bpo-5846: Fix deprecations for obsolete unittest functions and add tests. (GH-28382)
-rw-r--r--Lib/unittest/__init__.py31
-rw-r--r--Lib/unittest/loader.py21
-rw-r--r--Lib/unittest/test/test_loader.py47
3 files changed, 69 insertions, 30 deletions
diff --git a/Lib/unittest/__init__.py b/Lib/unittest/__init__.py
index e318c63..4b18488 100644
--- a/Lib/unittest/__init__.py
+++ b/Lib/unittest/__init__.py
@@ -66,40 +66,11 @@ from .main import TestProgram, main
from .runner import TextTestRunner, TextTestResult
from .signals import installHandler, registerResult, removeResult, removeHandler
# IsolatedAsyncioTestCase will be imported lazily.
+from .loader import makeSuite, getTestCaseNames, findTestCases
# deprecated
_TextTestResult = TextTestResult
-from .loader import (
- makeSuite as _makeSuite,
- findTestCases as _findTestCases,
- getTestCaseNames as _getTestCaseNames,
-)
-
-import warnings
-def makeSuite(*args, **kwargs):
- warnings.warn(
- "unittest.makeSuite() is deprecated and will be removed in Python 3.13. "
- "Please use unittest.TestLoader.loadTestsFromTestCase() instead.",
- DeprecationWarning, stacklevel=2
- )
- return _makeSuite(*args, **kwargs)
-
-def getTestCaseNames(*args, **kwargs):
- warnings.warn(
- "unittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. "
- "Please use unittest.TestLoader.getTestCaseNames() instead.",
- DeprecationWarning, stacklevel=2
- )
- return _getTestCaseNames(*args, **kwargs)
-
-def findTestCases(*args, **kwargs):
- warnings.warn(
- "unittest.findTestCases() is deprecated and will be removed in Python 3.13. "
- "Please use unittest.TestLoader.loadTestsFromModule() instead.",
- DeprecationWarning, stacklevel=2
- )
- return _findTestCases(*args, **kwargs)
# There are no tests here, so don't try to run anything discovered from
# introspecting the symbols (e.g. FunctionTestCase). Instead, all our
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index ba7105e..a4017b4 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -494,6 +494,9 @@ class TestLoader(object):
defaultTestLoader = TestLoader()
+# These functions are considered obsolete for long time.
+# They will be removed in Python 3.13.
+
def _makeLoader(prefix, sortUsing, suiteClass=None, testNamePatterns=None):
loader = TestLoader()
loader.sortTestMethodsUsing = sortUsing
@@ -504,14 +507,32 @@ def _makeLoader(prefix, sortUsing, suiteClass=None, testNamePatterns=None):
return loader
def getTestCaseNames(testCaseClass, prefix, sortUsing=util.three_way_cmp, testNamePatterns=None):
+ import warnings
+ warnings.warn(
+ "unittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. "
+ "Please use unittest.TestLoader.getTestCaseNames() instead.",
+ DeprecationWarning, stacklevel=2
+ )
return _makeLoader(prefix, sortUsing, testNamePatterns=testNamePatterns).getTestCaseNames(testCaseClass)
def makeSuite(testCaseClass, prefix='test', sortUsing=util.three_way_cmp,
suiteClass=suite.TestSuite):
+ import warnings
+ warnings.warn(
+ "unittest.makeSuite() is deprecated and will be removed in Python 3.13. "
+ "Please use unittest.TestLoader.loadTestsFromTestCase() instead.",
+ DeprecationWarning, stacklevel=2
+ )
return _makeLoader(prefix, sortUsing, suiteClass).loadTestsFromTestCase(
testCaseClass)
def findTestCases(module, prefix='test', sortUsing=util.three_way_cmp,
suiteClass=suite.TestSuite):
+ import warnings
+ warnings.warn(
+ "unittest.findTestCases() is deprecated and will be removed in Python 3.13. "
+ "Please use unittest.TestLoader.loadTestsFromModule() instead.",
+ DeprecationWarning, stacklevel=2
+ )
return _makeLoader(prefix, sortUsing, suiteClass).loadTestsFromModule(\
module)
diff --git a/Lib/unittest/test/test_loader.py b/Lib/unittest/test/test_loader.py
index bc54bf0..90e2081 100644
--- a/Lib/unittest/test/test_loader.py
+++ b/Lib/unittest/test/test_loader.py
@@ -1591,5 +1591,52 @@ class Test_TestLoader(unittest.TestCase):
self.assertEqual(loader.getTestCaseNames(Foo), test_names)
+class TestObsoleteFunctions(unittest.TestCase):
+ class MyTestSuite(unittest.TestSuite):
+ pass
+
+ class MyTestCase(unittest.TestCase):
+ def check_1(self): pass
+ def check_2(self): pass
+ def test(self): pass
+
+ @staticmethod
+ def reverse_three_way_cmp(a, b):
+ return unittest.util.three_way_cmp(b, a)
+
+ def test_getTestCaseNames(self):
+ with self.assertWarns(DeprecationWarning) as w:
+ tests = unittest.getTestCaseNames(self.MyTestCase,
+ prefix='check', sortUsing=self.reverse_three_way_cmp,
+ testNamePatterns=None)
+ self.assertEqual(w.warnings[0].filename, __file__)
+ self.assertEqual(tests, ['check_2', 'check_1'])
+
+ def test_makeSuite(self):
+ with self.assertWarns(DeprecationWarning) as w:
+ suite = unittest.makeSuite(self.MyTestCase,
+ prefix='check', sortUsing=self.reverse_three_way_cmp,
+ suiteClass=self.MyTestSuite)
+ self.assertEqual(w.warnings[0].filename, __file__)
+ self.assertIsInstance(suite, self.MyTestSuite)
+ expected = self.MyTestSuite([self.MyTestCase('check_2'),
+ self.MyTestCase('check_1')])
+ self.assertEqual(suite, expected)
+
+ def test_findTestCases(self):
+ m = types.ModuleType('m')
+ m.testcase_1 = self.MyTestCase
+
+ with self.assertWarns(DeprecationWarning) as w:
+ suite = unittest.findTestCases(m,
+ prefix='check', sortUsing=self.reverse_three_way_cmp,
+ suiteClass=self.MyTestSuite)
+ self.assertEqual(w.warnings[0].filename, __file__)
+ self.assertIsInstance(suite, self.MyTestSuite)
+ expected = [self.MyTestSuite([self.MyTestCase('check_2'),
+ self.MyTestCase('check_1')])]
+ self.assertEqual(list(suite), expected)
+
+
if __name__ == "__main__":
unittest.main()