我想测试一个接受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 }
.
.
.
}
答案 0 :(得分:4)
所以你想要等待一个期货清单,你有几个选择(我不知道ScalaTest是否有一个关于期货清单的whenReady),其中一个正在使用Future.sequence(futureList)
来创建一个Future[List[A]]
val futures = persistUsers(users)
whenReady(Future.sequence(futures)){result => result shouldEqual users}