Kaydet (Commit) c601dc16 authored tarafından R David Murray's avatar R David Murray

Merge #14971: Use class method name, not function.__name__, during unittest discovery.

...@@ -119,7 +119,7 @@ class TestLoader(object): ...@@ -119,7 +119,7 @@ class TestLoader(object):
elif (isinstance(obj, types.FunctionType) and elif (isinstance(obj, types.FunctionType) and
isinstance(parent, type) and isinstance(parent, type) and
issubclass(parent, case.TestCase)): issubclass(parent, case.TestCase)):
name = obj.__name__ name = parts[-1]
inst = parent(name) inst = parent(name)
# static methods follow a different path # static methods follow a different path
if not isinstance(getattr(inst, name), types.FunctionType): if not isinstance(getattr(inst, name), types.FunctionType):
......
...@@ -806,6 +806,22 @@ class Test_TestLoader(unittest.TestCase): ...@@ -806,6 +806,22 @@ class Test_TestLoader(unittest.TestCase):
ref_suite = unittest.TestSuite([MyTestCase('test')]) ref_suite = unittest.TestSuite([MyTestCase('test')])
self.assertEqual(list(suite), [ref_suite]) 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 # "The specifier name is a ``dotted name'' that may resolve ... to ... a
# test method within a test case class" # test method within a test case class"
# #
......
...@@ -34,6 +34,9 @@ Core and Builtins ...@@ -34,6 +34,9 @@ Core and Builtins
Library 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 #17487: The wave getparams method now returns a namedtuple rather than - Issue #17487: The wave getparams method now returns a namedtuple rather than
a plain tuple. a plain tuple.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment