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

lui*_*nal 13 java junit unit-testing maven

可能这在JUnit文档中可能是显而易见的,但似乎无法找到它,也不记得是否有我要描述的解决方案.

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

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

Tests in error:
  testFoo(bar.Foo)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
Run Code Online (Sandbox Code Playgroud)

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

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

然后我们得到这个:

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

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
Run Code Online (Sandbox Code Playgroud)

现在我得到的东西几乎没用.但是,我想看到完整的辣酱玉米饼馅,整个堆栈的痕迹.但是我似乎没有找到一种方法来使用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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

use*_*849 8

尝试将maven-surefire-plugin的useFile参数设置为false.根据Surefire插件文档,它将测试报告输出到控制台.

另请参阅trimStackTrace参数.