From 5ebf34e59b61cc6805033e4d2eb62bd6a854a47c Mon Sep 17 00:00:00 2001 From: Jason Fried Date: Thu, 17 Jan 2019 17:54:45 -0800 Subject: [PATCH 1/2] bpo-35767: Fix unittest.loader to allow partials as test_functions --- Lib/unittest/loader.py | 4 +++- Lib/unittest/test/test_loader.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index d936a96e73fbc7..ba7105e1ad6039 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -229,7 +229,9 @@ def shouldIncludeMethod(attrname): testFunc = getattr(testCaseClass, attrname) if not callable(testFunc): return False - fullName = '%s.%s' % (testCaseClass.__module__, testFunc.__qualname__) + fullName = f'%s.%s.%s' % ( + testCaseClass.__module__, testCaseClass.__qualname__, attrname + ) return self.testNamePatterns is None or \ any(fnmatchcase(fullName, pattern) for pattern in self.testNamePatterns) testFnNames = list(filter(shouldIncludeMethod, dir(testCaseClass))) diff --git a/Lib/unittest/test/test_loader.py b/Lib/unittest/test/test_loader.py index bfd722940b5683..a68548edc3547c 100644 --- a/Lib/unittest/test/test_loader.py +++ b/Lib/unittest/test/test_loader.py @@ -1,3 +1,4 @@ +import functools import sys import types import warnings @@ -1575,5 +1576,21 @@ def test_suiteClass__default_value(self): self.assertIs(loader.suiteClass, unittest.TestSuite) + def test_partial_functions(self): + def noop(arg): + pass + + class Foo(unittest.TestCase): + pass + + setattr(Foo, 'test_partial', functools.partial(noop, None)) + + loader = unittest.TestLoader() + + test_names = ['test_partial'] + self.assertEqual(loader.getTestCaseNames(Foo), test_names) + + + if __name__ == "__main__": unittest.main() From 64fdd416b7801d24fcf63420adbdc7fccd291275 Mon Sep 17 00:00:00 2001 From: Jason Fried Date: Fri, 18 Jan 2019 10:09:06 -0800 Subject: [PATCH 2/2] Update test_loader.py removed an extra newline --- Lib/unittest/test/test_loader.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Lib/unittest/test/test_loader.py b/Lib/unittest/test/test_loader.py index a68548edc3547c..bc54bf0553528d 100644 --- a/Lib/unittest/test/test_loader.py +++ b/Lib/unittest/test/test_loader.py @@ -1591,6 +1591,5 @@ class Foo(unittest.TestCase): self.assertEqual(loader.getTestCaseNames(Foo), test_names) - if __name__ == "__main__": unittest.main()