如何在 ScalaTest 中测试失败并打印堆栈跟踪?

tex*_*uce 2 scala scalatest

在 ScalaTest 中,我通过以下方式未通过测试:

fail("message")
Run Code Online (Sandbox Code Playgroud)

它仅以红色突出显示消息,但不打印堆栈跟踪。

我不得不采取一种非常尴尬的方式,例如:

try { throw new Exception } catch { case e => 
  e.printStackTrace()
  fail("message")
}
Run Code Online (Sandbox Code Playgroud)

获取堆栈跟踪。

我尝试这样做fail("message", new Exception),但它也没有打印。有没有更好的方法来做到这一点?

Mar*_*lic 5

报告器可以通过配置参数配置为显示短堆栈跟踪或完整堆栈跟踪

S - show short stack traces
F - show full stack traces
Run Code Online (Sandbox Code Playgroud)

例如,在标准输出上配置短堆栈跟踪,如下build.sbt所示

testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-oS")
Run Code Online (Sandbox Code Playgroud)

然后进行以下测试

import org.scalatest._

class HelloSpec extends FlatSpec with Matchers {
  "The Hello object" should "say hello" in {
    fail("boom!")
  }
}
Run Code Online (Sandbox Code Playgroud)

输出类似的东西

[info] HelloSpec:
[info] The Hello object
[info] - should say hello *** FAILED ***
[info]   boom! (HelloSpec.scala:7)
[info]   org.scalatest.exceptions.TestFailedException:
[info]   ...
[info]   at example.HelloSpec.$anonfun$new$1(HelloSpec.scala:7)
[info]   at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
Run Code Online (Sandbox Code Playgroud)