【问题标题】:Advantages of using ScalaFutures from ScalaTest vs. Await.result使用 ScalaTest 与 Await.result 中的 ScalaFutures 的优势
【发布时间】:2015-02-03 20:21:03
【问题描述】:

我最近与同事讨论了 ScalaTest 中 ScalaFutures 中的 use 或 whenReady 或 .futureValue 与测试中的 Await.result。除了可读性、配置一致性(超时)和使用 whenReady 时的结果范围之外,使用 ScalaFutures 方法与 Await.result 相比还有其他明显的优势吗?

我注意到 ScalaFutures 使用“轮询”技术而不是像 Await 那样阻塞,但是有人可以详细说明其优点吗?

【问题讨论】:

  • 你在这上面还有什么发现吗?我也想知道每个人的优点/缺点是什么
  • 不是真的,我想这主要是我说的,使用whenReady时超时配置的一致性和变量作用域对我来说是最有用的。
  • 有一个discussion on github

标签: scala testing scalatest


【解决方案1】:

当您使用Await.result 时,您正在阻塞调用线程。如果您以单线程方式运行测试(例如,使用像 parallelExecution in Test := false 这样的 SBT 设置),这种效果将最为明显。

ScalaFutures 完成的轮询是通过调度程序完成的(afaik);因此,它不会阻塞任何线程。因此,您可能有许多并发运行的测试,远远超过测试实际运行的任何 ExecutionContext 上可用的线程数。

【讨论】:

  • futureValue 的默认实现使用 Thread.sleep 指定的时间间隔,从而阻塞线程。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2015-08-18
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多