[Python-checkins] bpo-5846: Fix deprecations for obsolete unittest functions and add tests. (GH-28382)

serhiy-storchaka webhook-mailer at python.org
Fri Sep 17 05:09:36 EDT 2021


https://github.com/python/cpython/commit/b2b035a949eff1dc54b5bafe2bc9ce72b4d24438
commit: b2b035a949eff1dc54b5bafe2bc9ce72b4d24438
branch: main
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2021-09-17T12:09:32+03:00
summary:

bpo-5846: Fix deprecations for obsolete unittest functions and add tests. (GH-28382)

files:
M Lib/unittest/__init__.py
M Lib/unittest/loader.py
M Lib/unittest/test/test_loader.py

diff --git a/Lib/unittest/__init__.py b/Lib/unittest/__init__.py
index e318c635c1bcc..4b18488957394 100644
--- a/Lib/unittest/__init__.py
+++ b/Lib/unittest/__init__.py
@@ -66,40 +66,11 @@ def testMultiply(self):
 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 ba7105e1ad603..a4017b4aead17 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -494,6 +494,9 @@ def _find_test_path(self, full_path, pattern, namespace=False):
 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 bc54bf0553528..90e208182719b 100644
--- a/Lib/unittest/test/test_loader.py
+++ b/Lib/unittest/test/test_loader.py
@@ -1591,5 +1591,52 @@ class Foo(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()



More information about the Python-checkins mailing list