向sbt测试传递命令行参数

5
在sbt中,可以轻松地传递运行配置,例如:
sbt "run -Dlib.lib1.version=2.0.0" 

但是当参数传递给sbt test时,类似的事情会失败。例如:

sbt "test -Dlib.lib1.version=2.0.0"

官方文档指出,sbt test不支持命令行参数:"The test task accepts no command line arguments and runs all tests"。我想使用不同版本的库运行测试,该版本保存在reference.conf中作为变量,并且我想在测试期间覆盖此变量,而无需每次更改reference.conf。

那么,我如何通过命令行参数将配置传递给sbt test?

2个回答

4

testOnly任务允许您传递命令行参数,并且它们将被识别。

例如:sbt“testOnly MyTest -- -oU”使我可以通过shell传递-oU标志到scalatest运行器中。

理论上,这只允许您向特定测试传递额外的参数。但是,还有另一个功能可以利用来解决此问题。testOnly解析测试名称中的通配符

因此,您可以使用*通配符匹配每个测试并仍然传递参数

sbt“testOnly * -- -oU”

*之后的参数传递给测试运行器,并运行每个测试。


1
那个版本(1.2.8)对我来说没有运行任何测试,我需要使用sbt“testOnly -- -oU”而不是通配符。 - js.

2

我认为你可以避免通过配置文件传递库版本,你应该能够告诉sbt你想要不同的版本,例如:% "someConfig"

libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.6" % "it"

请注意,这些内容不能冲突,你不能同时使用lib %"test, it"lib %"test",因为会产生冲突。

嗨 @insan-e,我的情况实际上有点复杂,我无法将它放在build.sbt中。我正在从scala调用python代码,现在我想能够针对python3和python2进行测试,而配置变量是唯一的选项。 - KarateKid
1
嗯,既然在同一个测试包中不能有相同库的两个版本,你可以在sbt中创建一个自定义测试配置,例如testPython2testPython3。此外,你还可以扩展现有的测试配置,并在你的配置中使用它的类。 - insan-e
你的解决方案可行,谢谢。但是我不能将其作为答案接受,因为这只是绕过问题而不是解决问题。 - KarateKid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接