2121
2222
2323def _make_failed_import_test (name , suiteClass ):
24- message = 'Failed to import test module: %s\n %s' % (name , traceback .format_exc ())
24+ message = 'Failed to import test module: %s\n %s' % (
25+ name , traceback .format_exc ())
2526 return _make_failed_test ('ModuleImportFailure' , name , ImportError (message ),
26- suiteClass )
27+ suiteClass , message )
2728
2829def _make_failed_load_tests (name , exception , suiteClass ):
29- return _make_failed_test ('LoadTestsFailure' , name , exception , suiteClass )
30+ message = 'Failed to call load_tests:\n %s' % (traceback .format_exc (),)
31+ return _make_failed_test (
32+ 'LoadTestsFailure' , name , exception , suiteClass , message )
3033
31- def _make_failed_test (classname , methodname , exception , suiteClass ):
34+ def _make_failed_test (classname , methodname , exception , suiteClass , message ):
3235 def testFailure (self ):
3336 raise exception
3437 attrs = {methodname : testFailure }
3538 TestClass = type (classname , (case .TestCase ,), attrs )
36- return suiteClass ((TestClass (methodname ),))
39+ return suiteClass ((TestClass (methodname ),)), message
3740
3841def _make_skipped_test (methodname , exception , suiteClass ):
3942 @case .skip (str (exception ))
@@ -59,6 +62,10 @@ class TestLoader(object):
5962 suiteClass = suite .TestSuite
6063 _top_level_dir = None
6164
65+ def __init__ (self ):
66+ super (TestLoader , self ).__init__ ()
67+ self .errors = []
68+
6269 def loadTestsFromTestCase (self , testCaseClass ):
6370 """Return a suite of all tests cases contained in testCaseClass"""
6471 if issubclass (testCaseClass , suite .TestSuite ):
@@ -107,8 +114,10 @@ def loadTestsFromModule(self, module, *args, pattern=None, **kws):
107114 try :
108115 return load_tests (self , tests , pattern )
109116 except Exception as e :
110- return _make_failed_load_tests (module .__name__ , e ,
111- self .suiteClass )
117+ error_case , error_message = _make_failed_load_tests (
118+ module .__name__ , e , self .suiteClass )
119+ self .errors .append (error_message )
120+ return error_case
112121 return tests
113122
114123 def loadTestsFromName (self , name , module = None ):
@@ -336,7 +345,10 @@ def _find_tests(self, start_dir, pattern, namespace=False):
336345 except case .SkipTest as e :
337346 yield _make_skipped_test (name , e , self .suiteClass )
338347 except :
339- yield _make_failed_import_test (name , self .suiteClass )
348+ error_case , error_message = \
349+ _make_failed_import_test (name , self .suiteClass )
350+ self .errors .append (error_message )
351+ yield error_case
340352 else :
341353 mod_file = os .path .abspath (getattr (module , '__file__' , full_path ))
342354 realpath = _jython_aware_splitext (os .path .realpath (mod_file ))
@@ -362,7 +374,10 @@ def _find_tests(self, start_dir, pattern, namespace=False):
362374 except case .SkipTest as e :
363375 yield _make_skipped_test (name , e , self .suiteClass )
364376 except :
365- yield _make_failed_import_test (name , self .suiteClass )
377+ error_case , error_message = \
378+ _make_failed_import_test (name , self .suiteClass )
379+ self .errors .append (error_message )
380+ yield error_case
366381 else :
367382 load_tests = getattr (package , 'load_tests' , None )
368383 tests = self .loadTestsFromModule (package , pattern = pattern )
0 commit comments