使用SBT进行自定义测试配置的javaOptions

时间:2017-11-08 05:50:45

标签: sbt

我想暂停分叉的虚拟机,只有在使用IntegrationDebug配置时才等待来自外部调试器的连接。

参考共享来源' http://www.scala-sbt.org/1.x/docs/Testing.html中的部分,我想出了以下配置:

import sbt.Keys._

lazy val IntegrationDebug = config("itd") extend (IntegrationTest)

val scalaTestV = "3.0.4"

lazy val root = project.in(file("."))
  .configs(
    IntegrationTest,
    IntegrationDebug
  )
  .settings(
    Defaults.itSettings,
    inConfig(IntegrationDebug)(Defaults.testTasks),
    libraryDependencies ++= Seq(
      "org.scalactic" %% "scalactic" % scalaTestV,
      "org.scalatest" %% "scalatest" % scalaTestV,
    ),
    fork in IntegrationTest := true,
    javaOptions in IntegrationDebug += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8123",
  )

但是,它没有按预期工作:

it:test -> vm not suspended (expected)
itd:test -> vm not suspended (unexpected!!)

如果我将javaOptions的范围更改为IntegrationTest,即

 ...
 javaOptions in IntegrationTest += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8123",
 ...

然后

it:test -> vm suspended (unexpected!!)
itd:test -> vm suspended (expected)

无论如何都要让它像以下一样工作:

it:test -> vm not suspended
itd:test -> vm suspended

1 个答案:

答案 0 :(得分:0)

好的,如果我没有弄错的话,我可能已经找到了问题的解决方案。

更换行:

    javaOptions in IntegrationDebug += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8123",

  testOptions in IntegrationDebug += Tests.Argument("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8123")

应该做的伎俩(在这种情况下,VM仅针对itd:test命令暂停)。

我知道它已经很长时间了,但有人可能会觉得这很有用。我几乎有同样的问题,这就是为我解决的问题。