2017-06-21 169 views
0

我有JUnit测试,其中有时失败,因为如果没有捕捉到这个srack跟踪不使用try catch块并存入的方式运行时错误Screen of the Failure trace打印堆栈跟踪到文件

我想知道一份文件。

我用

 if(Thread.currentThread().getStackTrace() != null){ 

      logger.log(LogStatus.FAIL, "Rune Time Exception"); 
      report.endTest(logger); 
      report.flush(); 
     } 

但这并不知道是否有故障或不,它进入if语句如果在堆栈跟踪的东西。有没有办法以某种方式捕获JUnit选项卡上的“Errors”关键字?然后将堆栈跟踪记录到日志文件中?

谢谢

+0

有你不想使用try/catch块的原因吗? – ZeldaZach

+0

嗯,我需要很多数据插入点,如果我想尽可能捕捉每个人,每个人都可能会遇到异常情况,那么我将永远需要。这就是为什么我只是为了在发生运行时错误时得到一个转储文件,所以我可以在控制台中看到相同的东西,在报告中 –

+0

通常,在每种测试方法中,我们在开始时放入一个'try' ,在最后捕获(Exception e)',捕获异常,记录堆栈跟踪,然后重新引发junit正常工作。或者每个数据插入点在你的情况下是单独的测试方法? – RealSkeptic

回答

1

你在找什么叫做默认异常处理程序。 (Java UncaughtExceptionHandler

这是关于使用它的tutorial的错误。

//ExceptionHandlerExample.java 
package com.air0day.machetejuggling; 

public class ExceptionHandlerExample { 
    public static void main(String[] args) throws Exception { 

    Handler handler = new Handler(); 
    Thread.setDefaultUncaughtExceptionHandler(handler); 

    Thread t = new Thread(new SomeThread(), "Some Thread"); 
    t.start(); 

    Thread.sleep(100); 

    throw new RuntimeException("Thrown from Main"); 
    } 

} 

class Handler implements Thread.UncaughtExceptionHandler { 
    public void uncaughtException(Thread t, Throwable e) { 
    System.out.println("Throwable: " + e.getMessage()); 
    System.out.println(t.toString()); 
    } 
} 

class SomeThread implements Runnable { 
    public void run() { 
    throw new RuntimeException("Thrown From Thread"); 
    } 
} 
+0

这与我所寻找的相似,谢谢! –