使用ScalaTest与Await.result的ScalaFutures的优点

jga*_*on1 8 testing scala scalatest

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

我注意到ScalaFutures使用"轮询"技术而不是像Await一样阻止,但有人可以详细说明优势吗?

小智 2

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

ScalaFutures 进行的轮询是通过调度程序完成的(据我所知);因此,它不会阻塞任何线程。因此,您可能会同时运行许多测试,这些测试远远超出测试实际运行的任何 ExecutionContext 上可用的线程数。

  • `futureValue` 的默认实现在指定的时间间隔内使用 Thread.sleep,这会阻塞线程。 (2认同)