【发布时间】:2017-05-12 22:34:31
【问题描述】:
我正在为异步执行一些非 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)
}
}
}
或者,如果您正在制作剧本!应用程序并使用PlaySpec,然后您可以使用具有await 功能的Helpers:
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
}
}
【讨论】:
Future吗?或者你是在你的服务函数中触发异步代码而不是等待它?