2017-06-21 166 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

這與我所尋找的相似,謝謝! –