Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c601dc1

Browse files
committed
Merge #14971: Use class method name, not function.__name__, during unittest discovery.
2 parents f4216ea + 5e2f593 commit c601dc1

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

Lib/unittest/loader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def loadTestsFromName(self, name, module=None):
119119
elif (isinstance(obj, types.FunctionType) and
120120
isinstance(parent, type) and
121121
issubclass(parent, case.TestCase)):
122-
name = obj.__name__
122+
name = parts[-1]
123123
inst = parent(name)
124124
# static methods follow a different path
125125
if not isinstance(getattr(inst, name), types.FunctionType):

Lib/unittest/test/test_loader.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,22 @@ def test(self):
806806
ref_suite = unittest.TestSuite([MyTestCase('test')])
807807
self.assertEqual(list(suite), [ref_suite])
808808

809+
# #14971: Make sure the dotted name resolution works even if the actual
810+
# function doesn't have the same name as is used to find it.
811+
def test_loadTestsFromName__function_with_different_name_than_method(self):
812+
# lambdas have the name '<lambda>'.
813+
m = types.ModuleType('m')
814+
class MyTestCase(unittest.TestCase):
815+
test = lambda: 1
816+
m.testcase_1 = MyTestCase
817+
818+
loader = unittest.TestLoader()
819+
suite = loader.loadTestsFromNames(['testcase_1.test'], m)
820+
self.assertIsInstance(suite, loader.suiteClass)
821+
822+
ref_suite = unittest.TestSuite([MyTestCase('test')])
823+
self.assertEqual(list(suite), [ref_suite])
824+
809825
# "The specifier name is a ``dotted name'' that may resolve ... to ... a
810826
# test method within a test case class"
811827
#

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ Core and Builtins
3434
Library
3535
-------
3636

37+
- Issue #14971: unittest test discovery no longer gets confused when a function
38+
has a different __name__ than its name in the TestCase class dictionary.
39+
3740
- Issue #17487: The wave getparams method now returns a namedtuple rather than
3841
a plain tuple.
3942

0 commit comments

Comments
 (0)