gpt4 book ai didi

scala - 为什么在Spec2中有时无法捕捉到异常?

转载 作者:行者123 更新时间:2023-11-28 19:59:17 25 4
gpt4 key购买 nike

scala测试代码:

import play.api.test._
import scala._
import org.specs2.execute.Result

object ThrowTest extends PlaySpecification {

"throwA" should {
"catch the exception test1" in {
world must throwA[Exception]
}
"catch the exception test2" in {
hello {
world =>
world must throwA[Exception]
}
}
}

def hello(action: (String) => Result) = {
action(world)
}

def world: String = {
throw new Exception("world-exception")
}

}

为什么 test1 按我的预期工作,但 test2 却没有,这将异常抛出到外部并且永远不会捕获它:

[info] ! catch the exception test2
[error] Exception: world-exception (ThrowTest.scala:26)
[error] database.ThrowTest$.world(ThrowTest.scala:26)
[error] database.ThrowTest$.hello(ThrowTest.scala:22)
[error] database.ThrowTest$$anonfun$1$$anonfun$apply$4.apply(ThrowTest.scala:14)
[error] database.ThrowTest$$anonfun$1$$anonfun$apply$4.apply(ThrowTest.scala:14)
[info] Total for specification ThrowTest

最佳答案

因为对于测试 2,您的异常是从 hello before 调用 action 时抛出的。 action 是一个 String => Result 并且你用 world 调用它 - 在评估时 - 抛出异常,因此,所有这些代码:

world =>world must throwA[Exception]

永远不会执行。

关于scala - 为什么在Spec2中有时无法捕捉到异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com