当前位置: 首页 > 知识库问答 >
问题:

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

易俊友
2023-03-14

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

Tests in error:
  testFoo(bar.Foo)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
@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)我的测试用例逻辑;而且它是手动的,我必须为每个测试用例都这样做(我宁愿把胳膊肘润滑脂放在那里,这样我就可以得到一个堆栈跟踪,而不是需要一个堆栈跟踪却没有它。)

共有1个答案

危飞跃
2023-03-14

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

另请参见TrimStackTrace参数

 类似资料:
  • 问题内容: 最近,我问是否要报告捕获到的异常的文本。出乎意料的是,大多数答案都误解了我的问题,并以为我在问是否要报告堆栈跟踪以获取捕获的异常,这表明这样做是正常的。所以我要问一个后续问题。 在例外情况下,应该或不应该在什么情况下报告堆栈跟踪?通过“报告”,我包括要求一个日志记录框架为您记录堆栈跟踪 我不问是否报告 的东西 。我在问那个报告是否应该包括堆栈跟踪。 问题答案: 它取决于上下文。例如,当

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • 我在Scala/Play2.2.0应用程序上使用Logback 1.0.13。现有配置如下所示:

  • 我有一个ASP.NET Core3.0Web API托管在Azure应用服务上。我正在试图弄清楚为什么它会在一个控制器操作方法中抛出一个500内部服务器错误。我已经建立了应用程序洞察力,我可以在Azure Portal上的“失败”页面上看到有500个异常。但是,我看不到它们的堆栈跟踪。在Application Insights或Azure Monitor中打开堆栈跟踪报告需要做些什么吗。附注。即使

  • 我有两项服务-和<代码>服务1通过SpringREST模板调用一些API。现在

  • 问题内容: 这可能是一个非常幼稚的问题。 我曾经相信Java 中的a 总是 包含堆栈跟踪。这是正确的吗? 现在看起来我捕获了 没有 堆栈跟踪的异常。是否有意义?是否 可以 在没有堆栈跟踪的情况下捕获异常? 问题答案: 无需堆栈跟踪就可以捕获Java中的Throwable对象: 构造一个具有指定详细消息,原因,启用或禁用原因,启用或禁用 可写堆栈跟踪 的新throwable 。 填写执行堆栈跟踪。此