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发布于 2014-03-31 20:36:33
因为对于测试2,在调用action之前会从hello抛出异常。action是一个String => Result,你可以用world来调用它,当它被计算时,会抛出一个异常,因此,所有这些代码:
world =>world must throwA[Exception]永远不会被执行。
https://stackoverflow.com/questions/22759222
复制相似问题