11/*
2- * Copyright 2002-2015 the original author or authors.
2+ * Copyright 2002-2016 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
2525import org .apache .commons .logging .LogFactory ;
2626
2727import org .springframework .util .Assert ;
28+ import org .springframework .util .ReflectionUtils ;
2829
2930/**
3031 * {@code TestContextManager} is the main entry point into the <em>Spring
@@ -194,10 +195,12 @@ public void beforeTestClass() throws Exception {
194195 try {
195196 testExecutionListener .beforeTestClass (getTestContext ());
196197 }
197- catch (Exception ex ) {
198- logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
199- "] to process 'before class' callback for test class [" + testClass + "]" , ex );
200- throw ex ;
198+ catch (Throwable ex ) {
199+ if (logger .isWarnEnabled ()) {
200+ logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
201+ "] to process 'before class' callback for test class [" + testClass + "]" , ex );
202+ }
203+ ReflectionUtils .rethrowException (ex );
201204 }
202205 }
203206 }
@@ -227,10 +230,12 @@ public void prepareTestInstance(Object testInstance) throws Exception {
227230 try {
228231 testExecutionListener .prepareTestInstance (getTestContext ());
229232 }
230- catch (Exception ex ) {
231- logger .error ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
232- "] to prepare test instance [" + testInstance + "]" , ex );
233- throw ex ;
233+ catch (Throwable ex ) {
234+ if (logger .isErrorEnabled ()) {
235+ logger .error ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
236+ "] to prepare test instance [" + testInstance + "]" , ex );
237+ }
238+ ReflectionUtils .rethrowException (ex );
234239 }
235240 }
236241 }
@@ -264,11 +269,13 @@ public void beforeTestMethod(Object testInstance, Method testMethod) throws Exce
264269 try {
265270 testExecutionListener .beforeTestMethod (getTestContext ());
266271 }
267- catch (Exception ex ) {
268- logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
269- "] to process 'before' execution of test method [" + testMethod + "] for test instance [" +
270- testInstance + "]" , ex );
271- throw ex ;
272+ catch (Throwable ex ) {
273+ if (logger .isWarnEnabled ()) {
274+ logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
275+ "] to process 'before' execution of test method [" + testMethod + "] for test instance [" +
276+ testInstance + "]" , ex );
277+ }
278+ ReflectionUtils .rethrowException (ex );
272279 }
273280 }
274281 }
@@ -305,24 +312,26 @@ public void afterTestMethod(Object testInstance, Method testMethod, Throwable ex
305312 }
306313 getTestContext ().updateState (testInstance , testMethod , exception );
307314
308- Exception afterTestMethodException = null ;
315+ Throwable afterTestMethodException = null ;
309316 // Traverse the TestExecutionListeners in reverse order to ensure proper
310317 // "wrapper"-style execution of listeners.
311318 for (TestExecutionListener testExecutionListener : getReversedTestExecutionListeners ()) {
312319 try {
313320 testExecutionListener .afterTestMethod (getTestContext ());
314321 }
315- catch (Exception ex ) {
316- logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
317- "] to process 'after' execution for test: method [" + testMethod + "], instance [" +
318- testInstance + "], exception [" + exception + "]" , ex );
322+ catch (Throwable ex ) {
323+ if (logger .isWarnEnabled ()) {
324+ logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
325+ "] to process 'after' execution for test: method [" + testMethod + "], instance [" +
326+ testInstance + "], exception [" + exception + "]" , ex );
327+ }
319328 if (afterTestMethodException == null ) {
320329 afterTestMethodException = ex ;
321330 }
322331 }
323332 }
324333 if (afterTestMethodException != null ) {
325- throw afterTestMethodException ;
334+ ReflectionUtils . rethrowException ( afterTestMethodException ) ;
326335 }
327336 }
328337
@@ -347,23 +356,25 @@ public void afterTestClass() throws Exception {
347356 }
348357 getTestContext ().updateState (null , null , null );
349358
350- Exception afterTestClassException = null ;
359+ Throwable afterTestClassException = null ;
351360 // Traverse the TestExecutionListeners in reverse order to ensure proper
352361 // "wrapper"-style execution of listeners.
353362 for (TestExecutionListener testExecutionListener : getReversedTestExecutionListeners ()) {
354363 try {
355364 testExecutionListener .afterTestClass (getTestContext ());
356365 }
357- catch (Exception ex ) {
358- logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
359- "] to process 'after class' callback for test class [" + testClass + "]" , ex );
360- if (afterTestClassException == null ) {
361- afterTestClassException = ex ;
366+ catch (Throwable ex ) {
367+ if (logger .isWarnEnabled ()) {
368+ logger .warn ("Caught exception while allowing TestExecutionListener [" + testExecutionListener +
369+ "] to process 'after class' callback for test class [" + testClass + "]" , ex );
370+ if (afterTestClassException == null ) {
371+ afterTestClassException = ex ;
372+ }
362373 }
363374 }
364375 }
365376 if (afterTestClassException != null ) {
366- throw afterTestClassException ;
377+ ReflectionUtils . rethrowException ( afterTestClassException ) ;
367378 }
368379 }
369380
0 commit comments