如何在 ScalaTest 中使测试失败并打印堆栈跟踪?
How to fail a Test in ScalaTest and print stacktrace?
在 ScalaTest 中,我未能通过以下测试:
fail("message")
它只打印红色突出显示的消息,但不打印堆栈跟踪。
我不得不采取一种非常尴尬的方式,例如:
try { throw new Exception } catch { case e =>
e.printStackTrace()
fail("message")
}
获取堆栈跟踪。
我试过 fail("message", new Exception)
但它也不打印。有没有更好的方法来做到这一点?
您可以通过以下方式进行:
fail(new Exception().getStackTrace.foldLeft("")(_ + " " + " " + _))
它将打印出与空格连接的 stackTrace(或您想要连接的任何方式)
fail(new Exception().getCause)
或者这样得到异常的原因
两种方式都可以,就看你想要什么了。
记者可能 configured 通过配置参数显示简短或完整的堆栈跟踪
S - show short stack traces
F - show full stack traces
例如,在 build.sbt
中的标准输出上配置短堆栈跟踪,就像这样
testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-oS")
然后进行下面的测试
import org.scalatest._
class HelloSpec extends FlatSpec with Matchers {
"The Hello object" should "say hello" in {
fail("boom!")
}
}
输出类似于
[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(HelloSpec.scala:7)
[info] at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
在 ScalaTest 中,我未能通过以下测试:
fail("message")
它只打印红色突出显示的消息,但不打印堆栈跟踪。
我不得不采取一种非常尴尬的方式,例如:
try { throw new Exception } catch { case e =>
e.printStackTrace()
fail("message")
}
获取堆栈跟踪。
我试过 fail("message", new Exception)
但它也不打印。有没有更好的方法来做到这一点?
您可以通过以下方式进行:
fail(new Exception().getStackTrace.foldLeft("")(_ + " " + " " + _))
它将打印出与空格连接的 stackTrace(或您想要连接的任何方式)
fail(new Exception().getCause)
或者这样得到异常的原因
两种方式都可以,就看你想要什么了。
记者可能 configured 通过配置参数显示简短或完整的堆栈跟踪
S - show short stack traces
F - show full stack traces
例如,在 build.sbt
中的标准输出上配置短堆栈跟踪,就像这样
testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-oS")
然后进行下面的测试
import org.scalatest._
class HelloSpec extends FlatSpec with Matchers {
"The Hello object" should "say hello" in {
fail("boom!")
}
}
输出类似于
[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(HelloSpec.scala:7)
[info] at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)