Как развить 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
)))
}