summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/unittest/loader.py2
-rw-r--r--Lib/unittest/test/test_loader.py16
-rw-r--r--Misc/NEWS3
3 files changed, 20 insertions, 1 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index 541884e..2b92525 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -111,7 +111,7 @@ class TestLoader(object):
elif (isinstance(obj, types.FunctionType) and
isinstance(parent, type) and
issubclass(parent, case.TestCase)):
- name = obj.__name__
+ name = parts[-1]
inst = parent(name)
# static methods follow a different path
if not isinstance(getattr(inst, name), types.FunctionType):
diff --git a/Lib/unittest/test/test_loader.py b/Lib/unittest/test/test_loader.py
index d1b9ef5..e86c09b 100644
--- a/Lib/unittest/test/test_loader.py
+++ b/Lib/unittest/test/test_loader.py
@@ -806,6 +806,22 @@ class Test_TestLoader(unittest.TestCase):
ref_suite = unittest.TestSuite([MyTestCase('test')])
self.assertEqual(list(suite), [ref_suite])
+ # #14971: Make sure the dotted name resolution works even if the actual
+ # function doesn't have the same name as is used to find it.
+ def test_loadTestsFromName__function_with_different_name_than_method(self):
+ # lambdas have the name '<lambda>'.
+ m = types.ModuleType('m')
+ class MyTestCase(unittest.TestCase):
+ test = lambda: 1
+ m.testcase_1 = MyTestCase
+
+ loader = unittest.TestLoader()
+ suite = loader.loadTestsFromNames(['testcase_1.test'], m)
+ self.assertIsInstance(suite, loader.suiteClass)
+
+ ref_suite = unittest.TestSuite([MyTestCase('test')])
+ self.assertEqual(list(suite), [ref_suite])
+
# "The specifier name is a ``dotted name'' that may resolve ... to ... a
# test method within a test case class"
#
diff --git a/Misc/NEWS b/Misc/NEWS
index 05414e3..3c73b35 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -23,6 +23,9 @@ Core and Builtins
Library
-------
+- Issue #14971: unittest test discovery no longer gets confused when a function
+ has a different __name__ than its name in the TestCase class dictionary.
+
- Issue #17678: Fix DeprecationWarning in the http/cookiejar.py by changing the
usage of get_origin_req_host() to origin_req_host.