单元测试Scala未来阻止上下文

时间:2015-07-23 06:57:34

标签: scala unit-testing promise future

我有一些代码如下:

def someFunctioThatIWantToUnitTest() {
  val p = Promise[Int]()

  val result = getFutureInt(p)
  val resultFut = result.future

  // I extract the content in the resultFut and do what I want
  val didSomething = resultFut.get // not able to get here with my unit test
}

getFutureInt(...)如下所示:

private def getFutureInt(promise: Promise[Int]) {
  blocking { // from the scala concurrent object
    // here I successfully return the promise with an Int value
    promise.success(2)
  }
}

假设有适当的ExecutionContexts可用,我想测试someFunctioThatIWantToUnitTest方法!当我尝试调试我的单元测试时,它不允许我进入阻塞块并且我的测试返回失败。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

scala.concurrent.Await.result会解决您的问题吗?

val myFuture = Future(1)
val result: Int = Await.result(myFuture, 1.minute)

请记住,如果您的测试由于Future.get调用而提前失败,您可能永远不会捕获任何“未来”断点。这是因为测试可能比您预期的更早停止,顺便销毁所有执行上下文。 (我不知道内部说100%。)