SBT 不 运行 自定义测试配置中的任何 Specs2 测试
SBT don't run any Specs2 test in custom test configuration
我有一个多项目,它们之间共享一些设置和自定义配置。这些设置是应该 运行 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) 的工作示例,我无处可找到有关如何组合它们的信息。
为了让一切都按我的意愿工作,我必须设置一些东西。最终解决方案如下所示:
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
时,它会自动传播到扩展它的所有内容,因此我在派生配置中有两个相互冲突的参数。使用 :=
我摆脱了不需要的参数,事情又开始了。
None 我在文档中发现的那些怪癖,解决方案是将我发现的几个问题和大量尝试的解决方案放在一起的效果。
我有一个多项目,它们之间共享一些设置和自定义配置。这些设置是应该 运行 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) 的工作示例,我无处可找到有关如何组合它们的信息。
为了让一切都按我的意愿工作,我必须设置一些东西。最终解决方案如下所示:
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
时,它会自动传播到扩展它的所有内容,因此我在派生配置中有两个相互冲突的参数。使用:=
我摆脱了不需要的参数,事情又开始了。
None 我在文档中发现的那些怪癖,解决方案是将我发现的几个问题和大量尝试的解决方案放在一起的效果。