Почему иногда исключение не может быть захвачено в Spec2?
Тестовый код 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
нет, который выбрасывает исключение в external и никогда не перехватывает его:
[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
1 ответ
Потому что для теста 2 ваше исключение выдается из hello
перед звонком action
, action
это String => Result
и ты называешь это с world
который при оценке выдает исключение для всего этого кода:
world =>world must throwA[Exception]
никогда не выполняется.