diff -r a4091c1de27a Lib/unittest/loader.py --- a/Lib/unittest/loader.py Tue Aug 20 20:38:21 2013 +0300 +++ b/Lib/unittest/loader.py Tue Aug 20 22:54:04 2013 +0300 @@ -106,7 +106,9 @@ elif (isinstance(obj, types.UnboundMethodType) and isinstance(parent, type) and 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): return obj elif hasattr(obj, '__call__'): diff -r a4091c1de27a Lib/unittest/test/test_loader.py --- a/Lib/unittest/test/test_loader.py Tue Aug 20 20:38:21 2013 +0300 +++ b/Lib/unittest/test/test_loader.py Tue Aug 20 22:54:04 2013 +0300 @@ -1281,6 +1281,21 @@ loader = unittest.TestLoader() 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 ''. + 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__': unittest.main()