我有一个多项目,其中包含一些设置和自定义配置。这些设置是应该按标签运行Specs2测试的配置。但是,当我运行这些新配置时,它们根本没有运行任何测试。
import sbt.TestFrameworks.Specs2
import sbt.Tests.Argument
import sbt._
import sbt.Keys._
trait Settings extends Dependencies {
lazy val FunctionalTest = config("functional") extend(Test)
val commonConfigs = Seq(FunctionalTest)
val commonSettings =
inConfig(FunctionalTest)(Defaults.testSettings) ++
Seq(
libraryDependencies ++= mainDeps,
libraryDependencies ++= testDeps map (_ % "test"),
testOptions in Test += Argument(Specs2, "exclude", TestTag.FunctionalTest),
testOptions in FunctionalTest += Argument(Specs2, "include", TestTag.FunctionalTest)
)
}
在定义functional:test
这样的任务后,它不会运行任何测试,而test
任务将在未使用TestTag.FunctionalTest
标记的所有子项目中运行所有测试。
删除testOptions in FunctionalTest += Argument(Specs2, "include", TestTag.FunctionalTest)
不会更改结果,但删除inConfig(FunctionalTest)(Defaults.testSettings) ++
使functional:test
的行为与test
完全相同(运行除TestTag.FunctionaTest
以外的所有内容)。
如何让test
运行除TestTag.FunctionalTest
标记测试(现在是)和functional:test
之外的所有内容,只运行标记测试?我查看了SBT和Spec2文档,但是他们只有通过名称(SBT)过滤测试或使用命令行参数过滤它们(Specs2)的工作示例,我找不到有关如何组合它们的信息。
答案 0 :(得分:1)
为了让一切按照我的意愿运作,我必须设置几件事。最终解决方案看起来像这样:
trait Settings extends Dependencies {
lazy val FunctionalTest = config("functional") extend(Test)
val commonConfigs = Seq(FunctionalTest)
val functionalSettings =
inConfig(FunctionalTest)(Defaults.testTasks) ++
Seq(testOptions in FunctionalTest := Argument(Specs2, "include", TestTag.FunctionalTest))
val commonSettings =
++
Seq(
libraryDependencies ++= mainDeps,
libraryDependencies ++= testDeps map (_ % "test"),
testOptions in Test += Argument(Specs2, "exclude", TestTag.FunctionalTest)
)
}
用作:
project.
configs(commonConfigs).
settings(functionalSettings: _*).
settings(commonSettings: _*)
为了让它按照我的意图运作,我必须修理的事情:
将设置分为几个步骤:
当我通过连接它们并应用project.settings(allSettingsAtOnce: _*)
来创建大量设置时,事情就会中断。将它们分开是实现functional:test
工作的第一步。它还允许我应用修复#3,因为在创建一系列设置时testOptions := option
不可用。
将Defaults.testSettings
替换为Defaults.testTasks
。
inConfig(FunctionalTest)(Defaults.testSettings)
没有运行任何测试。任务在启动后立即成功,没有来自测试框架的任何报告。
将testOptions in FunctionalTest += option
替换为testOptions in FunctionalTest := options
。
使用+=
,我最终同时获得了exclude functional
和include functional
个测试框架参数。我想当我将参数附加到Test
时,它会自动传播到扩展它的所有内容,因此我在派生配置中有两个冲突的参数。使用:=
我摆脱了不必要的争论,事情再次发挥作用。
我发现在文档中描述的这些怪癖都没有,解决方案是将我发现的几个问题的解决方案放在一起并进行大量尝试的效果。