Skip to content

Commit

Permalink
bpo-5846: Deprecate obsolete methods in unittest (GH-28299)
Browse files Browse the repository at this point in the history
Deprecate makeSuite, findTestCases, and getTestCaseNames. Scheduled for removal in Python 3.13.
  • Loading branch information
Erlend Egeberg Aasland authored Sep 15, 2021
1 parent 9d76d28 commit ff6d2cc
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 4 deletions.
15 changes: 15 additions & 0 deletions Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,21 @@ Deprecated
:class:`~unittest.IsolatedAsyncioTestCase` test methods (other than the
default ``None`` value), is now deprecated.

* Deprecated the following :mod:`unittest` functions, scheduled for removal in
Python 3.13:

* :func:`unittest.findTestCases`
* :func:`unittest.makeSuite`
* :func:`unittest.getTestCaseNames`

Use :class:`~unittest.TestLoader` method instead:

* :meth:`unittest.TestLoader.loadTestsFromModule`
* :meth:`unittest.TestLoader.loadTestsFromTestCase`
* :meth:`unittest.TestLoader.getTestCaseNames`

(Contributed by Erlend E. Aasland in :issue:`5846`.)


Removed
=======
Expand Down
9 changes: 7 additions & 2 deletions Lib/test/test_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,9 +426,14 @@ def test_check__all__(self):
extra=extra,
not_exported=not_exported)

extra = {'TextTestResult', 'installHandler'}
extra = {
'TextTestResult',
'findTestCases',
'getTestCaseNames',
'installHandler',
'makeSuite',
}
not_exported = {'load_tests', "TestProgram", "BaseTestSuite"}

support.check__all__(self,
unittest,
("unittest.result", "unittest.case",
Expand Down
35 changes: 33 additions & 2 deletions Lib/unittest/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ def testMultiply(self):
'addModuleCleanup']

# Expose obsolete functions for backwards compatibility
# bpo-5846: Deprecated in Python 3.11, scheduled for removal in Python 3.13.
__all__.extend(['getTestCaseNames', 'makeSuite', 'findTestCases'])

__unittest = True
Expand All @@ -60,8 +61,7 @@ def testMultiply(self):
from .case import (addModuleCleanup, TestCase, FunctionTestCase, SkipTest, skip,
skipIf, skipUnless, expectedFailure)
from .suite import BaseTestSuite, TestSuite
from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames,
findTestCases)
from .loader import TestLoader, defaultTestLoader
from .main import TestProgram, main
from .runner import TextTestRunner, TextTestResult
from .signals import installHandler, registerResult, removeResult, removeHandler
Expand All @@ -70,6 +70,37 @@ def testMultiply(self):
# 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
# tests come from within unittest.test.
Expand Down
14 changes: 14 additions & 0 deletions Misc/NEWS.d/next/Library/2020-05-25-23-58-29.bpo-5846.O9BIfm.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Deprecated the following :mod:`unittest` functions, scheduled for removal in
Python 3.13:

* :func:`~unittest.findTestCases`
* :func:`~unittest.makeSuite`
* :func:`~unittest.getTestCaseNames`

Use :class:`~unittest.TestLoader` methods instead:

* :meth:`unittest.TestLoader.loadTestsFromModule`
* :meth:`unittest.TestLoader.loadTestsFromTestCase`
* :meth:`unittest.TestLoader.getTestCaseNames`

Patch by Erlend E. Aasland.

0 comments on commit ff6d2cc

Please sign in to comment.