Java Junit测试将在没有故障跟踪的情况下失败
我正在从Eclipse运行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) {
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()
的内容?似乎测试运行程序正在编写输出。