Java Junit测试将在没有故障跟踪的情况下失败

Java Junit测试将在没有故障跟踪的情况下失败,java,eclipse,junit,Java,Eclipse,Junit,我正在从Eclipse运行JUnit测试,每当我想导致测试失败时,都会使用命令Assert.fail(message)。问题是,我总是得到消息以及整个故障跟踪。JUnit有没有办法只显示消息而不显示堆栈跟踪?如果测试抛出错误,测试通常会自动失败而不显示消息。当然,您可以在catch子句中捕获异常并让测试失败。大概是这样的: @Test public void test() { try { // your test } catch (Exception e) {

我正在从Eclipse运行JUnit测试,每当我想导致测试失败时,都会使用命令
Assert.fail(message)
。问题是,我总是得到消息以及整个故障跟踪。JUnit有没有办法只显示消息而不显示堆栈跟踪?

如果测试抛出错误,测试通常会自动失败而不显示消息。当然,您可以在catch子句中捕获异常并让测试失败。大概是这样的:

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

当然,与处理异常时一样,在捕获异常时要尽可能精确

通过窗口-->首选项-->Java-->JUnit提供的Eclipse JUnit设置允许剪切某些异常类的堆栈跟踪:

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

@Test
public void test() {
    fail("Not yet implemented");
}
已筛选的对象:

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


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

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

通过这种方式,我只打印我想要打印的消息,然后只打印一行

我就可以简单地覆盖printStackTrace()-我的自定义Throwable的方法:

  • 异常->错误

  • 断言错误->失败

导入java.io.PrintStream;
导入java.io.PrintWriter;
公共类TestErrorException扩展了异常{
私有静态最终长serialVersionUID=-3486394019411535690L;
私有字符串消息;
公共TesterRoreException(字符串消息){
this.message=消息;
}
@凌驾
public void printStackTrace(){
System.err.println(消息);
}
@凌驾
public void printStackTrace(PrintStream s){
s、 println(消息);
}
@凌驾
公共无效printStackTrace(PrintWriter s){
s、 println(消息);
}
}

如何运行测试?Maven、Eclipse、独立JUnit runner?我正在使用Eclipse中的一个测试套件如果测试抛出异常,那么我确实希望它会失败,包括异常的数据以及可能的堆栈跟踪。但是,如果我试图使用Assert.fail(message)强制测试失败(例如,由于wring结果),我只希望测试在失败跟踪中显示该消息。我关于捕获异常的建议应该有效。我添加了一个示例来说明我的意思。这似乎给了我与Assert.fail()相同的行为。报告后我仍能看到痕迹message@n00bprogrammer代码中是否有类似于
e.printStackTrace()
的内容?似乎测试运行程序正在编写输出。