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

2022-09-01 23:46:42

这可能在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执行此操作的方法,除了在捕获/尝试块中笨拙地将堆栈跟踪打印到标准错误(丑陋)之外:

@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,以便它打印任何未捕获异常的堆栈跟踪,而不必*依赖于在我的测试用例代码中显式捕获/打印堆栈跟踪*?

谢谢。


答案 1

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

另请参阅该参数。trimStackTrace


答案 2

推荐