强制JUnit显示未捕获的异常堆栈跟踪

时间:2014-03-20 21:58:03

标签: java unit-testing maven junit

这可能在JUnit文档中已经很明显了,但似乎无法找到它,也不记得是否有解决方案我将要描述的内容。

当我通过maven(mvn test)运行我的测试用例时,标准错误中根本不显示意外异常的堆栈跟踪。我得到的只是一条消息,表明测试失败了。

如果我的测试代码抛出一个未经检查的异常,比如一个NPE,我的测试用例输出如下:

Tests in error:
  testFoo(bar.Foo)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

如果我的测试用例声明它可以抛出一个Exception对象,并且像这样包装运行时异常:

@Test
public void testFoo() throws Exception
{
  try{ // something funky
     throw new NullPointerException();
  } catch( RuntimeException ex ) {
      throw new Exception(ex);
  }
}

然后我们得到这个:

Tests in error:
  testFoo(bar.Foo): java.lang.NullPointerException

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

现在我得到的东西几乎没用。但是,我想看到完整的辣酱玉米饼馅,整个堆栈的痕迹。但是我似乎没有找到一种方法来使用JUnit,除了在catch / try块中克隆我的测试用例以将堆栈跟踪打印到标准错误(丑陋):

@Test
public void testFoo() throws Exception
{
  try{ // something funky
     throw new NullPointerException();
  } catch( RuntimeException ex ) {
      ex.printStackTrace(); // << this works, but it is ugly.
      throw ex;
  }
}

我讨厌这样做,因为它污染了我的测试用例逻辑(IMO);并且它是手动的,我必须为每个测试用例做这件事(我宁愿把肘部油脂做,以便我在那里和那里得到堆栈跟踪,而不是需要堆栈跟踪而没有它。)< / p>

有没有办法利用/告诉JUnit,以便打印任何未捕获异常的堆栈跟踪,而不必依赖于在我的测试用例代码中明确捕获/打印堆栈跟踪 <?> < / p>

感谢。

1 个答案:

答案 0 :(得分:8)

尝试将maven-surefire-plugin的useFile参数设置为false。根据{{​​3}},将测试报告输出到控制台。

另请参阅trimStackTrace参数。