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
答案 0 :(得分:2)
因为对于测试2,在调用hello
之前,action
会抛出异常。 action
是String => Result
,您可以使用world
来调用它 - 在评估时 - 抛出异常,因此,所有这些代码:
world =>world must throwA[Exception]
永远不会被执行。