Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何测量和显示单个测试的运行时间?_Scala_Duration_Measurement_Scalatest - Fatal编程技术网

Scala 如何测量和显示单个测试的运行时间?

Scala 如何测量和显示单个测试的运行时间?,scala,duration,measurement,scalatest,Scala,Duration,Measurement,Scalatest,我有一个使用scalatest编写的可能长期运行的测试: 即使测试在超时限制内完成,它的运行时间对运行测试的人来说也是有价值的。如何在scalatest的输出中测量和显示这个特定测试的运行时间 更新:目前,我使用自己的函数测量运行时间,就像r.v的回答一样。我想知道scalatest是否已经提供了此功能。选项将给出测试的持续时间。例如,我在build.sbt中使用以下内容 testOptions in Test += Tests.Argument("-oD") 编辑: 您还可以将以下各项用于单

我有一个使用scalatest编写的可能长期运行的测试:

即使测试在超时限制内完成,它的运行时间对运行测试的人来说也是有价值的。如何在scalatest的输出中测量和显示这个特定测试的运行时间


更新:目前,我使用自己的函数测量运行时间,就像r.v的回答一样。我想知道scalatest是否已经提供了此功能。

选项将给出测试的持续时间。例如,我在build.sbt中使用以下内容

testOptions in Test += Tests.Argument("-oD")
编辑:

您还可以将以下各项用于单独运行:

> test-only org.acme.RedSuite -- -oD

此外,您可以为常规时间测量定义以下函数:

def time[T](str: String)(thunk: => T): T = {
  print(str + "... ")
  val t1 = System.currentTimeMillis
  val x = thunk
  val t2 = System.currentTimeMillis
  println((t2 - t1) + " msecs")
  x
}
并在任何地方使用它(不依赖于ScalaTest)


除了r.v.的回答之外: 如果您有多项目生成,Test+=Tests.Argument(“-oD”)中的testOptions在build.sbt的根级别上不起作用,因为Test引用src/Test/scala。您必须将其放入子项目设置中

Project(id = "da_project", base = file("da_project"))
    .settings(
        testOptions in Test += Tests.Argument("-oDG"),
        libraryDependencies ++= Seq(
            ...
        )
    )

谢谢,这很有帮助,但我只想测量一个测试,而不管sbt的配置如何。我不需要测量其他测试,我想一直测量这个。我正在考虑测量一块代码,并在测试结束时使用
info(…)
打印它的时间。我希望scalatest能够提供这样的测量功能,因为它已经使用这个选项进行了测量。我不知道
info()
,但我认为我的答案是等效的和可行的。
info()
在哪里?它做什么?是的,我现在就是这样做的,使用自己的函数,如
time
。(可能更精确一点。)|
info()
只是在scalatest的输出中添加了一条消息。在更新版本的sbt和scalatest中,我们应该设置测试框架:
testOptions In test+=Tests.Argument(TestFrameworks.scalatest,“-oD”)
或者,我们可以在整个构建级别进行设置:
testOptions in Test in ThisBuild+=Tests.Argument(TestFrameworks.ScalaTest,“-oD”)
test("a long running test") {
  time("test running"){
    failAfter(Span(60, Seconds)) {
    // ...
  }
}
Project(id = "da_project", base = file("da_project"))
    .settings(
        testOptions in Test += Tests.Argument("-oDG"),
        libraryDependencies ++= Seq(
            ...
        )
    )