@@ -208,7 +208,7 @@ def addTest(self, cls):
208
208
209
209
def run (self , result ):
210
210
for c in self ._tests :
211
- result . exceptions . extend ( run_suite (c , result ) )
211
+ run_suite (c , result )
212
212
return result
213
213
214
214
@@ -217,6 +217,8 @@ def run(self, suite):
217
217
res = TestResult ()
218
218
suite .run (res )
219
219
220
+ res .printErrors ()
221
+ print ("----------------------------------------------------------------------" )
220
222
print ("Ran %d tests\n " % res .testsRun )
221
223
if res .failuresNum > 0 or res .errorsNum > 0 :
222
224
print ("FAILED (failures=%d, errors=%d)" % (res .failuresNum , res .errorsNum ))
@@ -235,11 +237,33 @@ def __init__(self):
235
237
self .failuresNum = 0
236
238
self .skippedNum = 0
237
239
self .testsRun = 0
238
- self .exceptions = []
240
+ self .errors = []
241
+ self .failures = []
239
242
240
243
def wasSuccessful (self ):
241
244
return self .errorsNum == 0 and self .failuresNum == 0
242
245
246
+ def printErrors (self ):
247
+ print ()
248
+ self .printErrorList (self .errors )
249
+ self .printErrorList (self .failures )
250
+
251
+ def printErrorList (self , lst ):
252
+ sep = "----------------------------------------------------------------------"
253
+ for c , e in lst :
254
+ print ("======================================================================" )
255
+ print (c )
256
+ print (sep )
257
+ print (e )
258
+
259
+ def __repr__ (self ):
260
+ # Format is compatible with CPython.
261
+ return "<unittest.result.TestResult run=%d errors=%d failures=%d>" % (
262
+ self .testsRun ,
263
+ self .errorsNum ,
264
+ self .failuresNum ,
265
+ )
266
+
243
267
244
268
def capture_exc (e ):
245
269
buf = io .StringIO ()
@@ -274,9 +298,15 @@ def run_suite(c, test_result):
274
298
print (" skipped:" , e .args [0 ])
275
299
test_result .skippedNum += 1
276
300
except Exception as ex :
277
- exceptions .append (capture_exc (ex ))
278
- print (" FAIL" )
279
- test_result .failuresNum += 1
301
+ ex_str = capture_exc (ex )
302
+ if isinstance (ex , AssertionError ):
303
+ test_result .failuresNum += 1
304
+ test_result .failures .append (((name , c ), ex_str ))
305
+ print (" FAIL" )
306
+ else :
307
+ test_result .errorsNum += 1
308
+ test_result .errors .append (((name , c ), ex_str ))
309
+ print (" ERROR" )
280
310
# Uncomment to investigate failure in detail
281
311
# raise
282
312
continue
@@ -299,9 +329,5 @@ def test_cases(m):
299
329
suite .addTest (c )
300
330
runner = TestRunner ()
301
331
result = runner .run (suite )
302
- if result .exceptions :
303
- sep = "\n ----------------------------------------------------------------------\n "
304
- print (sep )
305
- print (sep .join (result .exceptions ))
306
332
# Terminate with non zero return code in case of failures
307
- sys .exit (result .failuresNum > 0 )
333
+ sys .exit (result .failuresNum or result . errorsNum )
0 commit comments