ScalaTest显示原始故障堆栈跟踪

时间:2015-05-19 00:59:16

标签: scala scalatest

如何在测试输出中显示Try Failure的原始堆栈跟踪?

当我执行以下操作时:

 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

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

1 个答案:

答案 0 :(得分:3)

如果将一些导致错误的代码包装到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,而是检查内部类型/值:

result.get should equal blah