У меня есть игра! 2 для приложения Scala, и я использую Specs2 для тестов. Я могу запускать все тесты с помощью команды test
или конкретной спецификации с помощью test-only MyParticularSpec
.
Что бы я хотел сделать, это отметить некоторые конкретные спецификации или даже отдельные методы внутри спецификации, чтобы делать такие вещи, как:
- запуск всех тестов, которые не являются интеграцией (т.е. не имеют доступа к внешним ресурсам)
- запуск всех тестов, которые не имеют доступа к внешним ресурсам в режиме записи (но все еще работают тесты чтения)
- запуск всех тестов, но заданный
и т.д.
Я думаю, что что-то подобное должно быть выполнимым, возможно, добавив некоторые аннотации, но я не уверен, как это сделать.
Существует ли механизм выборочного запуска некоторых тестов, а не других?
РЕДАКТИРОВАТЬ Я ответил сам при использовании test-only
. Однако параметр командной строки не работает для задачи test
. Следуя sbt guide, я попытался создать дополнительную конфигурацию sbt, например
object ApplicationBuild extends Build {
// more settings
lazy val UnitTest = config("unit") extend(Test)
lazy val specs = "org.scala-tools.testing" %% "specs" % "1.6.9" % "unit"
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA)
.configs(UnitTest)
.settings(inConfig(UnitTest)(Defaults.testTasks) : _*)
.settings(
testOptions in UnitTest += Tests.Argument("exclude integration"),
libraryDependencies += specs
)
}
Это работает, когда я передаю аргументы без параметров, например, когда я помещаю Test.Argument("plan")
. Но я не смог найти, как передать более сложный аргумент. Я пробовал
Tests.Argument("exclude integration")
Tests.Argument("exclude=integration")
Tests.Argument("-exclude integration")
Tests.Argument("-exclude=integration")
Tests.Argument("exclude", "integration")
Tests.Argument("exclude \"integration\"")
и, возможно, больше. Все еще не понятно, что такое правильный синтаксис.
Кто-нибудь знает, как передать аргументы с параметрами specs2 из sbt?