Kaydet (Commit) 050e9e5c authored tarafından Michael Foord's avatar Michael Foord

Closes issue 14971.

 unittest test discovery no longer gets confused when a function
has a different __name__ than its name in the TestCase class dictionary.
üst cb7e5fa9
...@@ -106,7 +106,9 @@ class TestLoader(object): ...@@ -106,7 +106,9 @@ class TestLoader(object):
elif (isinstance(obj, types.UnboundMethodType) and elif (isinstance(obj, types.UnboundMethodType) and
isinstance(parent, type) and isinstance(parent, type) and
issubclass(parent, case.TestCase)): issubclass(parent, case.TestCase)):
return self.suiteClass([parent(obj.__name__)]) name = parts[-1]
inst = parent(name)
return self.suiteClass([inst])
elif isinstance(obj, suite.TestSuite): elif isinstance(obj, suite.TestSuite):
return obj return obj
elif hasattr(obj, '__call__'): elif hasattr(obj, '__call__'):
......
...@@ -1281,6 +1281,21 @@ class Test_TestLoader(unittest.TestCase): ...@@ -1281,6 +1281,21 @@ class Test_TestLoader(unittest.TestCase):
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.assertTrue(loader.suiteClass is unittest.TestSuite) self.assertTrue(loader.suiteClass is unittest.TestSuite)
# 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])
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -32,6 +32,9 @@ Core and Builtins ...@@ -32,6 +32,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 #18672: Fixed format specifiers for Py_ssize_t in debugging output in - Issue #18672: Fixed format specifiers for Py_ssize_t in debugging output in
the _sre moduel. the _sre moduel.
......
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