我正在运行Eclipse的JUnit测试,并且只要我想让测试失败就使用命令Assert.fail(message)
。问题是我总是得到消息以及整个故障跟踪。有没有办法让JUnit只显示消息,没有堆栈跟踪?
答案 0 :(得分:2)
Eclipse JUnit设置可通过 Window - >获得。偏好 - > Java - > Junit 允许切割某些异常类的堆栈跟踪:
使用这些设置,测试的堆栈跟踪:
@Test
public void test() {
fail("Not yet implemented");
}
已过滤:
现在尝试取消选择“org.junit。*”(或“junit.framework.Assert”,具体取决于您正在使用的JUnit版本),然后重新运行测试。堆栈跟踪立即变得可怕:
也许这就是您正在寻找的功能。
答案 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);
}
}