如何测试Scala中的期货清单

时间:2016-05-04 13:56:04

标签: scala scalatest

我想测试一个接受List值的方法(使用ScalaTest)并在数据库中更新它们,为每个值返回Future表示更新成功。是否有一种惯用的方法来验证数据库中是否存在所有值? 如何知道从方法返回的所有Future何时完成?

trait Result
case object A extends Result
case object B extends Result

def addToDB(i: String): Future[Result]

def persistUsers(users: List[String]): List[Future[Result]] = {
  users.map(addToDB)
}

我尝试了类似的东西(有效)但有更好的方法吗?

"should update list " in {
  val users = List("a","b","c")

  persistUsers(users)

  Thread.sleep(1000)

  whenReady(db.find("a")) { result => result shouldEqual A }
  .
  .
  .

}

1 个答案:

答案 0 :(得分:4)

所以你想要等待一个期货清单,你有几个选择(我不知道ScalaTest是否有一个关于期货清单的whenReady),其中一个正在使用Future.sequence(futureList)来创建一个Future[List[A]]

val futures = persistUsers(users)

whenReady(Future.sequence(futures)){result => result shouldEqual users}