Как развить jvm для каждого теста в sbt

Я работаю с некоторыми классами, которые (по некоторым причинам) могут использоваться только один раз внутри одной виртуальной машины. Мои тестовые примеры работают, если я запускаю их индивидуально (fork := true) в моих настройках sbt.

Если я запускаю более одного из этих тестов, они терпят неудачу с исключением, которое должно выполняться с исполнителем потока, отклоняющим задачу (она скорее всего закрыта). Было бы очень много времени, чтобы выяснить причину проблемы, и даже если я нахожу проблему, я, возможно, не смогу ее решить (у меня нет доступа к исходному коду).

В настоящее время я использую тестовую среду specs2, но любая тестовая структура с использованием sbt будет приемлемой.

Существует ли какая-либо тестовая среда для sbt, которая способна запускать каждый тест в jvm fork?

Мысли или идеи о возможных других решениях, конечно, приветствуются.

Ответ 1

Оказывается, этого довольно легко достичь. Документация достаточно и ее можно найти в Тестирование - Тесты на вилку

// Define a method to group tests, in my case a single test per group
def singleTests(tests: Seq[TestDefinition]) =
  tests map { test =>
    new Group(
      name = test.name,
      tests = Seq(test),
      runPolicy = SubProcess(javaOptions = Seq.empty[String]))
  }

// Add the following to the `Project` settings
testGrouping in Test <<= definedTests in Test map singleTests

Ответ 2

Использование устаревшего синтаксиса:

testGrouping in Test := (definedTests in Test).value map { test =>
  Tests.Group(name = test.name, tests = Seq(test), runPolicy = Tests.SubProcess(
    ForkOptions(
      javaHome.value,
      outputStrategy.value,
      Nil,
      Some(baseDirectory.value),
      javaOptions.value,
      connectInput.value,
      envVars.value
    )))
}