scala - 使用 ScalaTest 中的 ScalaFutures 与 Await.result 的优势

标签 scala testing scalatest

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

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

最佳答案

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

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

关于scala - 使用 ScalaTest 中的 ScalaFutures 与 Await.result 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319697/

相关文章:

xml - 在 scala Play 模板中使用 scala.xml.Node

用于大文件的 Scala http 客户端

scala - 用于新 Scala 项目的 NoSQL(例如 MongoDB)或 RDMS(例如 PostgreSQL)?

testing - 作为TeamBuild的一部分运行MSTest单元测试

angular - 在 stackblitz 中将测试用例添加到 Angular 应用程序时出错

scala - 为什么方法参数化而类型参数从不使用?

java.lang.reflect.Method#getModifiers 返回有效范围外的标志?

testing - 测试线束软件

scala - 为什么 Scala + Intellij + ScalaTest + Scalactic 出现 "could not find implicit"错误,但不是来自 sbt

eclipse - 如何将 Scalatest 导入 Eclipse?