Junit测试失败而没有故障跟踪

时间:2015-03-19 15:07:24

标签: java eclipse junit

我正在运行Eclipse的JUnit测试,并且只要我想让测试失败就使用命令Assert.fail(message)。问题是我总是得到消息以及整个故障跟踪。有没有办法让JUnit只显示消息,没有堆栈跟踪?

4 个答案:

答案 0 :(得分:2)

Eclipse JUnit设置可通过 Window - >获得。偏好 - > Java - > Junit 允许切割某些异常类的堆栈跟踪:

JUnit preferences

使用这些设置,测试的堆栈跟踪:

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

已过滤:

Filtered stack trace

现在尝试取消选择“org.junit。*”(或“junit.framework.Assert”,具体取决于您正在使用的JUnit版本),然后重新运行测试。堆栈跟踪立即变得可怕:

Full stack trace

也许这就是您正在寻找的功能。

答案 1 :(得分:0)

如果测试引发错误,测试通常会在没有消息的情况下自动失败。您当然可以捕获异常并让测试在catch子句中失败。像这样:

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

当然,在处理异常时总是如此,尽可能准确地捕捉它们。

答案 2 :(得分:0)

我发现了一种在不显示长故障跟踪的情况下使测试崩溃的方法。我没有使用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;
}

这样我只打印要打印的消息,然后打印一行

答案 3 :(得分:0)

我只是覆盖printStackTrace() - 我的自定义Throwable的方法:

  • 例外 - > ERROR

  • AssertionError - > FAILURE

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);
    }

}