更多的修辞问题,但仍需要问。
今天我已经听说过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 seconds
和50 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是一个很棒的图书馆:)