Как измерить и отобразить время выполнения одного теста?

У меня есть потенциально длительный тест, написанный с использованием Scales:

test("a long running test") {
  failAfter(Span(60, Seconds)) {
    // ...
  }
}

Даже если тест завершается в течение установленного времени, его время может быть полезным для человека, проводящего тест. Как я могу измерить и отобразить время выполнения этого отдельного теста в выходных данных самого высокого уровня?

Обновление: в настоящее время я измеряю время выполнения своей собственной функцией, как в ответе rv. Я хотел бы знать, предлагает ли scalatest эту функцию уже.

2 ответа

Решение

-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.

Кроме того, вы можете определить следующую функцию для общих измерений времени:

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)) {
    // ...
  }
}

В дополнение к ответу rv: если у вас есть мультипроектная сборка testOptions in Test += Tests.Argument("-oD") не работает на корневом уровне в build.sbt, потому что Test относится к src/test/scala. Вы должны положить его в настройках вашего Под-проекта

Project(id = "da_project", base = file("da_project"))
    .settings(
        testOptions in Test += Tests.Argument("-oDG"),
        libraryDependencies ++= Seq(
            ...
        )
    )
Другие вопросы по тегам