如何在测试输出中显示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
但堆栈跟踪显示测试失败的位置,而不是失败的原始堆栈跟踪。
答案 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