ScalaTest 显示原始失败堆栈跟踪

ScalaTest display original Failure stacktrace

如何将尝试失败的原始堆栈跟踪显示为测试输出的一部分?

当我执行以下操作时:

 result.success.value should equal blah

结果是失败

The Try on which success was invoked was not a Success.

或者,如果我先这样做:

result should be a 'success

它提供了更多信息,因为我可以看到异常:

Failure(java.lang.IllegalArgumentException: Cannot format given Object as a Date) was not a success

但是堆栈跟踪显示了它在测试中失败的位置,而不是失败的原始堆栈跟踪。

如果一些导致错误的代码被包装到 Try 中,这意味着异常在计算内部的某个地方被处理,并且它的原因和消息不会在某个地方打印,直到明确请求。为了查看原始原因,您可以直接访问失败对象(docs),或者手动处理失败:

val (ok, message) = result match {
  case Success(v) => (true, "")
  case Failure(ex) =>
    (false, ex.getMessage + "\n" + ex.getStackTrace.mkString("\n"))
}

assert(ok, message)

This link 看起来也很有帮助。

如果您想要打印原始堆栈跟踪 - 使用 result.get,但不检查 'success,而是检查内部 type/value:

result.get should equal blah