【发布时间】:2014-05-23 21:48:26
【问题描述】:
出于我的特定原因,我想覆盖 test 任务以运行并非所有测试,而是像 test-only TopTestSuiteName param1 param2 一样运行。有可能吗?
我尝试浏览有关任务和示例的文档,但仍远未了解什么是可能的,什么是不可能的。
或者我可以创建自定义任务并以某种方式使用现有的test-only 功能?我觉得这是合理的,但完全无法理解 - 我从哪里开始。
【问题讨论】:
出于我的特定原因,我想覆盖 test 任务以运行并非所有测试,而是像 test-only TopTestSuiteName param1 param2 一样运行。有可能吗?
我尝试浏览有关任务和示例的文档,但仍远未了解什么是可能的,什么是不可能的。
或者我可以创建自定义任务并以某种方式使用现有的test-only 功能?我觉得这是合理的,但完全无法理解 - 我从哪里开始。
【问题讨论】:
我建议你不要管test,而是添加一个自定义的东西。
别名怎么样?您可以将其添加到您的 .sbt 定义中:
addCommandAlias("myTest", "testOnly TopTestSuiteName -- param1 param2")
但是,如果您确实需要 myTest 成为一个任务(例如,如果您希望另一个任务依赖它),那么这里的代码(在 sbt 0.13 的 .sbt 格式中)用于在自定义任务:
val myTest = taskKey[Unit]("call testOnly with some special args")
myTest in Test :=
(testOnly in Test).toTask(" TopTestSuiteName -- param1 param2").value
【讨论】:
param1 param2,因为我不知道您的意图是什么。您想将这些参数传递给谁或什么,究竟是……?
test-only 中,这些是“命令行”测试参数(我使用 ScalaTests 的 ConfigMap 将数据库访问凭据传递给 TestSuites)
testOnly Foo -- param1 param2。 testOnly 使用 -- 将类名与传递给测试框架的参数分开。
addCommandAlias 创建顶级别名(我有多项目,这是不希望的)。 toTask 需要 sbt >= 0.13.1。