在Play 2 Test + Futures中捕获异常

时间:2015-02-04 20:08:01

标签: scala testing playframework

如何使用play来测试未来成功中的异常?

这是我的代码:

"A Validity" should {
    "be created based on Client's Mobile" in new WithApplication {
      val objectId = UUIDs.timeBased()
      CValidityServiceModule.checkValidity(true, "MOBILE", clientId, objectId)
      val future = genericService.findByObjectIdAndByClientId(objectId, clientId)

      future.onComplete {
        case Success(s) => {
          s match {
            case Some(v) => {
              v.clientId mustEqual clientId
              v.objectId mustEqual objectId
            }
            case None => assert(false)
          }
        }
        case Failure(t) => {
          assert(false, t.getMessage)
        }
      }
    }

基本上如果任何匹配器失败,它会让我产生异常,但测试是绿色的。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在测试之前,您需要等待Future完成。使用onComplete回调不会起作用,因为测试在Future之前完成,异常将在不同的上下文中抛出。

Await.result应该为您完成:

import scala.concurrent.Await
import scala.concurrent.duration.Duration
val future = genericService.findByObjectIdAndByClientId(objectId, clientId)
val s = Await.result(future, Duration.Inf)
s match {
  case Some(v) => {
    v.clientId mustEqual clientId
    v.objectId mustEqual objectId
  }
  case None => assert(false)
}