单元测试 Scala Future 阻塞上下文
Unit Testing Scala Future Blocking Contexts
我有一些代码是这样的:
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 方法!当我尝试调试我的单元测试时,它不允许我进入阻塞块并且我的测试 returns 失败了。有办法解决这个问题吗?
scala.concurrent.Await.result
能解决您的问题吗?
val myFuture = Future(1)
val result: Int = Await.result(myFuture, 1.minute)
还请记住,如果您的测试由于 Future.get
调用而提前失败,您可能永远不会捕获任何 "Future" 断点。这是因为测试可能比您预期的更早停止,顺便破坏所有执行上下文。 (我不知道内部结构如何说 100%。)
我有一些代码是这样的:
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 方法!当我尝试调试我的单元测试时,它不允许我进入阻塞块并且我的测试 returns 失败了。有办法解决这个问题吗?
scala.concurrent.Await.result
能解决您的问题吗?
val myFuture = Future(1)
val result: Int = Await.result(myFuture, 1.minute)
还请记住,如果您的测试由于 Future.get
调用而提前失败,您可能永远不会捕获任何 "Future" 断点。这是因为测试可能比您预期的更早停止,顺便破坏所有执行上下文。 (我不知道内部结构如何说 100%。)