我正在为异步执行一些非 io 任务并使用回调的服务编写一些测试。我需要每次测试都等到所有回调完成。是否可以确定
scala.concurrent.ExecutionContext.Implicits.global
完成所有任务了吗?
我正在为异步执行一些非 io 任务并使用回调的服务编写一些测试。我需要每次测试都等到所有回调完成。是否可以确定
scala.concurrent.ExecutionContext.Implicits.global
完成所有任务了吗?
如果您有这样的服务:
class MyService {
def asyncDouble(i: Int): Future[Int] = Future.successful {
Thread.sleep(1000)
i * 2
}
}
你可以用 ScalaTest 像这样测试它:
import org.scalatest.FunSuite
import org.scalatest.concurrent.ScalaFutures
class MyServiceSpec extends FunSuite with ScalaFutures {
test("Should double the input") {
val service = new MyService
val future = service.asyncDouble(10)
whenReady(future) { result =>
assert(result == 20)
}
}
}
或者,如果您正在制作 Play!app 和 using PlaySpec
,然后你可以使用Helpers
which 有一个await
功能:
import org.scalatestplus.play.PlaySpec
import play.api.test.Helpers._
class MyServiceSpec extends PlaySpec {
"Should double the input" in {
val service = new MyService
val future = service.asyncDouble(10)
val result = await(future)
result mustEqual 20
}
}