New submission from Martin von Gagern <martin.vgag...@gmx.net>: If I follow the documentation at http://docs.python.org/library/unittest.html#unittest.main by putting the following two snippets of code in my module file:
def load_tests(loader, standard_tests, pattern='test*.py'): # top level directory cached on loader instance this_dir = os.path.dirname(__file__) package_tests = loader.discover(start_dir=this_dir, pattern=pattern) standard_tests.addTests(package_tests) return standard_tests if __name__ == "__main__": unittest.main() then the application will fail with an obscure error message: ====================================================================== ERROR: __main__ (unittest.loader.LoadTestsFailure) ---------------------------------------------------------------------- TypeError: object of type 'NoneType' has no len() ---------------------------------------------------------------------- Ran 1 test in 0.000s Monkeypatching unittest.loader._make_failed_load_tests to display a stack trace, I got this: Traceback (most recent call last): File "/usr/lib64/python2.7/unittest/loader.py", line 71, in loadTestsFromModule return load_tests(self, tests, None) File "tester.py", line 15, in load_tests package_tests = loader.discover(start_dir=this_dir, pattern=pattern) File "/usr/lib64/python2.7/unittest/loader.py", line 204, in discover tests = list(self._find_tests(start_dir, pattern)) File "/usr/lib64/python2.7/unittest/loader.py", line 247, in _find_tests if not self._match_path(path, full_path, pattern): File "/usr/lib64/python2.7/unittest/loader.py", line 235, in _match_path return fnmatch(path, pattern) File "/usr/lib64/python2.7/fnmatch.py", line 43, in fnmatch return fnmatchcase(name, pat) File "/usr/lib64/python2.7/fnmatch.py", line 75, in fnmatchcase res = translate(pat) File "/usr/lib64/python2.7/fnmatch.py", line 87, in translate i, n = 0, len(pat) TypeError: object of type 'NoneType' has no len() The error is due to the fact that pattern is passed as None to load_tests, but apparently loader.discover doesn't loke a None pattern. I would suggest that a) discover internally translates None to the default of 'test*.py' or b) the documentation is changed to cater for this common use case, i.e. by including a "pattern is None" case distinction in its load_tests snippet. In case b) is implemented but not a), it would be nice to have a more expressive error message by catching the error somewhat sooner. ---------- assignee: docs@python components: Documentation, Library (Lib) files: tester.py messages: 128579 nosy: docs@python, gagern priority: normal severity: normal status: open title: pattern=None when following documentation for load_tests and unittest.main() type: feature request versions: Python 2.7 Added file: http://bugs.python.org/file20763/tester.py _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue11218> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com