diff options
Diffstat (limited to 'Lib/unittest/loader.py')
-rw-r--r-- | Lib/unittest/loader.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index c04de06..4036454 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -33,12 +33,18 @@ def _make_failed_import_test(name, suiteClass): # Python 2.3 compatibility # format_exc returns two frames of discover.py as well message += '\n%s' % traceback.format_exc() + return _make_failed_test('ModuleImportFailure', name, suiteClass, + ImportError(message)) - def testImportFailure(self): - raise ImportError(message) - attrs = {name: testImportFailure} - ModuleImportFailure = type('ModuleImportFailure', (case.TestCase,), attrs) - return suiteClass((ModuleImportFailure(name),)) +def _make_failed_load_tests(name, exception, suiteClass): + return _make_failed_test('LoadTestsFailure', name, suiteClass, exception) + +def _make_failed_test(classname, methodname, suiteClass, exception): + def testFailure(self): + raise exception + attrs = {methodname: testFailure} + TestClass = type(classname, (case.TestCase,), attrs) + return suiteClass((TestClass(methodname),)) class TestLoader(object): @@ -73,7 +79,11 @@ class TestLoader(object): load_tests = getattr(module, 'load_tests', None) tests = self.suiteClass(tests) if use_load_tests and load_tests is not None: - return load_tests(self, tests, None) + try: + return load_tests(self, tests, None) + except Exception, e: + return _make_failed_load_tests(module.__name__, e, + self.suiteClass) return tests def loadTestsFromName(self, name, module=None): @@ -239,7 +249,11 @@ class TestLoader(object): for test in self._find_tests(full_path, pattern): yield test else: - yield load_tests(self, tests, pattern) + try: + yield load_tests(self, tests, pattern) + except Exception, e: + yield _make_failed_load_tests(package.__name__, e, + self.suiteClass) defaultTestLoader = TestLoader() |