sbt条件式样式配置

问题描述 投票:3回答:1

我希望能够使用命令行在scala测试的并行和串行执行之间切换。

具有“ test.par”系统属性的工作示例:

val parallelTestOpt = Option(System.getProperty("test.par"))

testOptions in IntegrationTest += Tests.Argument(
  //Configure distributor's pool size
  parallelTestOpt.map(count =>s"-P$count").getOrElse("-P1")
)

lazy val root = (project in file("."))
  .configs(IntegrationTest)
  .settings(Defaults.itSettings,
      //If suites are executed in parallel
      IntegrationTest / parallelExecution := parallelTestOpt.exists(_ != "1"),
      IntegrationTest / testForkedParallel := parallelTestOpt.exists(_ != "1")
  )

“有问题的”部分是parallelTestOpt.map(count =>s"-P$count").getOrElse("-P1")。当未指定“ test.par”属性时,我不想提供默认值“ -P1”。实现该目标的最佳实践是什么?

也许整个概念是错误的,我应该以其他方式来做?

scala sbt integration-testing scalatest
1个回答
0
投票

作为一种替代方法,考虑将并行性问题分解为自定义命令

commands += Command.single("testpar") { (state, numOfThreads) =>
  s"""set IntegrationTest / testOptions  += Tests.Argument("-P$numOfThreads")"""::
     "set IntegrationTest / parallelExecution := true" ::
     "set IntegrationTest / testForkedParallel := true" ::
     "IntegrationTest / test" :: state
}

并用testpar 6执行,以6个线程池运行。

© www.soinside.com 2019 - 2024. All rights reserved.