如何从 sbt 命令行为 scalatest 设置系统 属性

How to set System property for a scalatest from sbt command line

ScalaTest 套件正在使用

 System.getProperty("my.command-line.property")

实现这个设置的sbt命令行是什么?

我试过了

SBT_OPTS="-Dmy.command-line.property=foo" sbt "test-only <path to test suite"

还有:

JAVA_OPTS="-J-Dmy.command-line.property=foo" sbt "test-only <path to test suite"

最后:

sbt/sbt  '; set javaOptions in Test  +="-Dtest.num.points=500000"; \
project mllib; test-only org.apache.spark.mllib.optimization.LBFGSSuite'

当使用任何这些尝试时,System.getProperty 出现空白。

工作的一种方法是 运行 来自 Intellij 的 ScalaTest 并将 JVM 参数设置为 -Dmy.command-line.property=foo 在 运行 配置中。

将此添加到您的项目设置中:

javaOptions in Test += "-Dmy.command-line.property=foo"

如果您有很多设置,您可以将它们放在一个配置文件中并像这样传递:

javaOptions in Test += "-Dconfig.file=conf/test.conf"

编辑: 从命令行传递它: 我猜你是在寻找这个答案:How to set system properties for runMain on command line?

编辑 2: 你试过这个吗? 某人';设置 javaOptions += "-Dconfig.resource=../application.conf" ;测试'

这对我有用:

val myFoo = sys.props("foo.property")

和:

SBT_OPTS="-Dfoo.property=foo" sbt "testOnly *your_test_package*"

您的第三种方法几乎 有效(如果设置了fork in Test := true)。但是你得先换成项目:

sbt/sbt  '; project mllib; set javaOptions in Test  +="-Dtest.num.points=500000"; \
test-only org.apache.spark.mllib.optimization.LBFGSSuite'

对于某些套件,您可以覆盖 beforeAll() 挂钩并在那里进行初始化。这并不能保证此初始化将 运行 在任何 Spark 初始化之前,但它确实使它在许多情况下足够早。

override def beforeAll() {
  super.beforeAll()
  System.setProperty("java.io.tmpdir", "C:\dev\Temp")
}