【问题标题】:sbt conditional if else style configurationsbt 条件 if else 样式配置
【发布时间】:2020-05-29 10:19:11
【问题描述】:

我希望能够使用命令行在并行和串行执行 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】:

    作为一种替代方法,考虑将并行性问题分离到single-argument custom command

    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 个线程池运行。


    解决注释,为了编译时安全尝试

    commands += Command.single("testpar") { (state, numOfThreads) =>
      val extracted = Project.extract(state)
      val stateWithParallel= extracted.appendWithSession(
        Seq(
          IntegrationTest / testOptions  += Tests.Argument(s"-P$numOfThreads"),
          IntegrationTest / parallelExecution := true,
          IntegrationTest / testForkedParallel := true,
        ),
        state
      )
      extracted.runTask(IntegrationTest / test, stateWithParallel)
      state
    }
    

    【讨论】:

    • 谢谢你的回答,我喜欢关注点分离的想法。但是由于语句是作为字符串生成的,我的 IDE 无法帮助进行语法检查和突出显示,有没有办法解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多