我有一个可能运行时间较长的测试,使用scalatest编写:
test("a long running test") {
failAfter(Span(60, Seconds)) {
// ...
}
}
即使测试在超时限制内完成,对于运行测试的人来说,其运行时间仍然很有价值。我该如何测量并显示scalatest输出中这个单独特定测试的运行时间?更新:目前我使用自己的函数来测量运行时间,就像r.v的答案中一样。我想知道scalatest是否已经提供了这个功能。
我有一个可能运行时间较长的测试,使用scalatest编写:
test("a long running test") {
failAfter(Span(60, Seconds)) {
// ...
}
}
即使测试在超时限制内完成,对于运行测试的人来说,其运行时间仍然很有价值。我该如何测量并显示scalatest输出中这个单独特定测试的运行时间?-oD
选项将给出测试的持续时间。例如,我在我的build.sbt中使用以下内容。
testOptions in Test += Tests.Argument("-oD")
编辑:
您也可以使用以下内容进行单独运行:
> test-only org.acme.RedSuite -- -oD
请参考http://www.scalatest.org/user_guide/using_scalatest_with_sbt,该网站有相关的IT技术内容。
此外,您可以定义以下函数进行通用时间测量:
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)
test("a long running test") {
time("test running"){
failAfter(Span(60, Seconds)) {
// ...
}
}
testOptions in Test += Tests.Argument("-oD")
不起作用,因为Test是指src/test/scala。您必须将其放在子项目设置中。Project(id = "da_project", base = file("da_project"))
.settings(
testOptions in Test += Tests.Argument("-oDG"),
libraryDependencies ++= Seq(
...
)
)
testOptions in Test in ThisBuild += Tests.Argument(TestFrameworks.ScalaTest, "-oD")
- Hosam Aly
info(...)
。我希望 scalatest 提供这样的测量函数,因为它已经使用此选项执行测量。 - Petrinfo()
是什么,但我认为我的答案是等效且可行的。info()
在哪里,它是做什么的? - r.vtime
。(也许nanoTime
可能会更精确一些。)info()
只是将消息添加到 scalatest 的输出中。 - PetrtestOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-oD")
。 - Hosam Aly