如何在 Scala 中测试期货列表
How to test list of futures in Scala
我想测试一个方法(使用 ScalaTest),它接受 List
个值并在数据库中更新它们,为每个值返回一个 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 }
.
.
.
}
所以你想要等待一个 Futures 列表,你有几个选项(我不知道 ScalaTest 是否有一个 whenReady for a Futures 列表),其中一个是使用 Future.sequence(futureList)
创建一个 Future[List[A]]
val futures = persistUsers(users)
whenReady(Future.sequence(futures)){result => result shouldEqual users}
我想测试一个方法(使用 ScalaTest),它接受 List
个值并在数据库中更新它们,为每个值返回一个 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 }
.
.
.
}
所以你想要等待一个 Futures 列表,你有几个选项(我不知道 ScalaTest 是否有一个 whenReady for a Futures 列表),其中一个是使用 Future.sequence(futureList)
创建一个 Future[List[A]]
val futures = persistUsers(users)
whenReady(Future.sequence(futures)){result => result shouldEqual users}