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

时间:2015-04-24 21:40:56

标签: scala sbt scalatest

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

4 个答案:

答案 0 :(得分:1)

你的第三种方式几乎有效(如果设置了fork in Test := true)。但是你必须先改变项目:

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

答案 1 :(得分:0)

这对我有用:

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

将其添加到项目设置中:

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 : 你试过这个吗? sbt&#39 ;; set javaOptions + =&#34; -Dconfig.resource = .. / application.conf&#34; ;测试&#39;