2012-02-29 26 views
0

您好我有自定義的JUnit運行如何通過自定義junit運行器記錄異常堆棧跟蹤?

public class InterceptorRunner extends BlockJUnit4ClassRunner { 

    @Retention(RetentionPolicy.RUNTIME) 
    @Target(ElementType.TYPE) 
    public @interface InterceptorClasses { 
     public Class<?>[] value(); 
    } 

    public InterceptorRunner(Class<?> klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    public Statement methodInvoker(FrameworkMethod method, Object test) { 
     InterceptorStatement statement = new InterceptorStatement(super.methodInvoker(method, test)); 
     InterceptorClasses annotation = test.getClass().getAnnotation(InterceptorClasses.class); 
     Class<?>[] klasez = annotation.value(); 
     try { 
      for (Class<?> klaz : klasez) { 
       statement.addInterceptor((Interceptor) klaz.newInstance()); 
      } 
     } catch (IllegalAccessException ilex) { 
      ilex.printStackTrace(); 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } 
     return statement; 
    } 

    @Override 
    public void run(RunNotifier notifier) { 
     FailListener listener = new FailListener(); 
     notifier.addListener(listener); 
     super.run(notifier); 
     notifier.removeListener(listener); 
    } 
} 

和定製監聽

public class FailListener extends RunListener { 

    @Override 
    public void testFailure(Failure failure) throws Exception { 
     System.out.println("test fails"); 
     super.testFailure(failure); 
    } 

    public void testStarted(Description description) throws Exception { 
     System.out.println("Test started"); 
     super.testStarted(description); 
    } 

} 

我如何才能登錄,不僅的System.out.println( 「測試失敗」);還有Exception和其他一些信息?

在我看來,它有可能使用失敗,但我不知道如何去做。

回答

1

失敗對象有一個方法getException().

+0

謝謝,它真的有幫助 – 2012-03-01 08:38:28