簡體   English   中英

Junit測試失敗,沒有失敗跟蹤

[英]Junit test to fail without failure trace

我正在從Eclipse運行JUnit測試,並且每當我要導致測試失敗時就使用命令Assert.fail(message) 問題是我總是隨同整個失敗跟蹤一起得到消息。 JUnit有什么方法可以只顯示消息,而沒有堆棧跟蹤嗎?

通過窗口->首選項-> Java-> Junit可以使用Eclipse JUnit設置,從而可以切割某些異常類的堆棧跟蹤:

JUnit首選項

使用以下設置,測試的堆棧跟蹤:

@Test
public void test() {
    fail("Not yet implemented");
}

被過濾:

過濾后的堆棧跟蹤

現在,嘗試取消選擇“ org.junit。*”(或“ junit.framework.Assert”,具體取決於您所使用的JUnit版本),然后重新運行測試。 堆棧跟蹤立即變得令人恐懼:

全棧跟蹤

也許這就是您要尋找的功能。

如果測試拋出錯誤,則測試通常會自動失敗而不會顯示消息。 您當然可以捕獲異常,並在catch子句中使測試失敗。 像這樣:

@Test
public void test()  {
   try {
      // your test
  } catch (Exception e) {
      fail("I caught an " + e.class.getSimpleName());
   }
}

當然,在處理異常時要一如既往,在捕獲異常時要盡可能精確。

我找到了一種使測試崩潰的方法,而又沒有顯示很長的失敗痕跡。 我創建自己的異常,而不是使用Assert.fail(),並將失敗跟蹤設置為最小:

public static void failTest(String message) throws MyTestFailure {
    System.err.println(message);
    MyTestFailure exception = new MyTestFailure(message);
    StackTraceElement elem = new StackTraceElement("com.my.package.Utils", "failTest", "failTest", 3);
    StackTraceElement elem1[] = new StackTraceElement[1];
    elem1[0] = elem;
    exception.setStackTrace(elem1);
    throw exception;
}

這樣,我只打印要打印的消息,然后再打印一行

我將為我的自定義Throwable簡單地覆蓋printStackTrace()方法:

  • 異常->錯誤

  • AssertionError->失敗

import java.io.PrintStream;
import java.io.PrintWriter;

public class TestErrorException extends Exception{

    private static final long serialVersionUID = -3486394019411535690L;
    private String message;

    public TestErrorException(String message) {
        this.message = message;
    }

    @Override
    public void printStackTrace() {
        System.err.println(message);
    }

    @Override
    public void printStackTrace(PrintStream s) {
        s.println(message);
    }

    @Override
    public void printStackTrace(PrintWriter s) {
        s.println(message);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM