为什么要在每个库中使用DSL重新发明类似持续时间的构造?

时间:2017-09-26 14:52:06

标签: scala scalatest

更多的修辞问题,但仍需要问。 今天我已经听说过org.scalatest.concurrent.Eventually特质,并决定尝试它(以前我用的是流利的等待)。 所以特质是相当不错的,允许写下这样的东西:

def waitUntilTeamFormIsShown(implicit driver: WebDriver) = {
  eventually(Timeout(10 seconds), Interval(50 milliseconds)){
    find(xpath("//div[contains(@class, 'user_groups')]/form")) shouldBe defined
  }
  completed
}

但有一刻我不喜欢:10 seconds50 milliseconds这里不是scala.concurrent.duration.Duration的实例,而是你需要导入:

import org.scalatest.time.SpanSugar._
import org.scalatest.concurrent.PatienceConfiguration._

因此ScalaTest实现了自己的scala库中已有的东西。

例如,当我使用Future - s并需要等待结果时,我会写出类似于

的内容
Await.result(DB.matchingPointIDsByRadarID(arId)(db), 4 seconds).head 

4 seconds这里看起来完全相同,但这次是scala.concurrent.duration.FiniteDuration,我需要使用不同的导入:

import scala.concurrent.duration._

我的问题是:这是一个很好的图书馆设计吗?我认为可能第三方图书馆设计师试图坚持使用Scala中已有的手段。但可能有一些精心设计的理由来实现Span的模拟Duration

注意:我认为Bill Venner的ScalaTest是一个很棒的图书馆:)

0 个答案:

没有答案