Scala 有条件地执行build.sbt的一部分

Scala 有条件地执行build.sbt的一部分,scala,sbt,Scala,Sbt,下面是build.sbt的一个片段,当我想调试单个测试时,我会将其注释掉 // *** Uncomment These Two Lines If you are debugging individual Test *** //fork in Test := false //parallelExecution in Test := false 我想做的不是手动注释上述片段,而是根据我指定给sbt(例如“test only-Dindividual_test=true”)的环境值运行上述条件。这

下面是
build.sbt
的一个片段,当我想调试单个测试时,我会将其注释掉

// *** Uncomment These Two Lines If you are debugging individual Test ***

//fork in Test := false

//parallelExecution in Test := false
我想做的不是手动注释上述片段,而是根据我指定给
sbt
(例如
“test only-Dindividual_test=true”
)的环境值运行上述条件。这样,我可以从IDE编写各种测试和集成运行配置

我知道如果我们把它放在这里,总有一天,开发人员会用这个未记录的东西来推动更改

这是我们需要在
build.scala
中做的事情吗


或者有其他方法可以实现这一点吗?

您可以创建一个单独的设置键,您可以在交互会话中更改该设置键:

build.sbt

val individualTest = Def.settingKey[Boolean]("Whether to run tests individually")

individualTest := false // individualTest is a setting like every other

fork in Test := !individualTest.value

parallelExecution in Test := !individualTest.value
现在,在会话中,您可以交互切换
individualTest

> set individualTest := true
> testOnly
// fork in Test is false
// parallelExcecution is false
> set individualTest := false
// fork in Test is true
// parallelExcecution is true
如果要从命令行运行此命令,请将每个单独的sbt命令放在引号中:

sbt 'set individualTest := true' 'testOnly myTest'

在IDE中调试测试时(例如Intellij IDEA),不需要使用sbt。或者,如果您的用例不同,请澄清您的问题。同意,大多数测试不要求我们运行sbt,但在这个特定的测试用例中,我们需要作为web服务器运行测试,并且我们正在发布sbt任务(在我们的情况下,实际上是activator)。感谢您提供的解决方案。它确实回答了一半的谜题。现在,我试图找出如何从命令行设置这个值,这是问题的另一半。例如,“activator-DinvidualTest=true测试”不起作用。阅读sbt启动器文档,但我还不清楚。-D不是一个好选项,因此我尝试了activator“set individualTest:=true”仅测试myTest仍会导致错误您应该能够使用System.getProperty(),例如individualTest=System.getProperty(“individualTest”,“false”)