强制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

现在我得到一些几乎没用的东西。但是,我想看到完整的enchilada,整个堆栈跟踪。但是我似乎找不到一种方法来做到这一点与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)我的测试用例逻辑;而且它是手动的,我必须为每个测试用例都这样做(我宁愿付出体力,这样我就可以在那里和那里获得堆栈跟踪,而不是需要堆栈跟踪而没有堆栈跟踪)

是否有一种方法来利用/告诉JUnit,以便它打印任何未捕获异常的堆栈跟踪,而不必依赖于显式捕获/打印堆栈跟踪在我的测试用例代码*?

谢谢。

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

参见trimStackTrace参数

最新更新