1

我正在为异步执行一些非 io 任务并使用回调的服务编写一些测试。我需要每次测试都等到所有回调完成。是否可以确定

scala.concurrent.ExecutionContext.Implicits.global 

完成所有任务了吗?

4

1 回答 1

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)
    }
  }
}

或者,如果您正在制作 Play!app 和 using PlaySpec,然后你可以使用Helperswhich 有一个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
  }
}
于 2017-05-12T22:54:18.117 回答