我正在为一个异步执行某些非io任务并使用回调的服务编写一些测试。我需要每个测试都等到所有回调都完成。是否有可能确定
scala.concurrent.ExecutionContext.Implicits.global
完成所有任务?
答案 0 :(得分:0)
如果你有这样的服务:
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)
}
}
}
或者如果你正在玩游戏!应用并使用PlaySpec
,然后您可以使用具有Helpers
功能的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
}
}