SBT远程调试在intellij中工作,但在执行测试时不起作用

时间:2016-05-10 14:44:49

标签: scala debugging intellij-idea playframework sbt

我在终端sbt -jvm-debug 9999中执行以下命令,并使用Intellij 15.0.4-1中的默认值启动远程调试配置。接下来,我执行sbt任务run,断点按预期工作。当我执行test任务而不是调试不再工作,尽管相同的代码被执行。

play-scala激活器种子与Play Framework 2.4一起使用。测试用spec2编写。 有谁知道我可能做错了什么?

这是我的代码:

Class DebugTest.scala

object DebugTest {
  def helloWorld(): Unit ={
    println("Oh my")
  }
}

Class ApplicationSpec.scala

import org.specs2.mutable._

import play.api.test._
import play.api.test.Helpers._

class ApplicationSpec extends Specification {

  "Application" should {
    "just print oh my in console" in new WithApplication{
      DebugTest.helloWorld()
    }
  }
}

文件build.sbt

lazy val root = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.11.7"

libraryDependencies ++= Seq( jdbc,
  ws,
  specs2 % Test,
  "org.webjars.bower" % "adminlte" % "2.3.3",
  "org.pac4j" % "play-pac4j" % "2.2.0-SNAPSHOT",
  "org.pac4j" % "pac4j-http" % "1.9.0-SNAPSHOT",
  "com.typesafe.play" % "play-cache_2.11" % "2.4.6"
)

resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"
resolvers += "Sonatype snapshots repository" at "https://oss.sonatype.org/content/repositories/snapshots/"

routesGenerator := InjectedRoutesGenerator

fork in run := true
fork in test := false

文件test.sbt

fork in test := false

1 个答案:

答案 0 :(得分:4)

Play sbt插件定义了以下设置:

fork in Test := true

因此,当您启动测试时,会启动另一个jvm(无需远程调试)。

您只需添加build.sbt

即可
fork in Test := false 

您甚至可以创建仅包含该行的test.sbt文件,并将其从源代码管理中忽略。

这只应在调试期间使用。之后,请回到默认行为;或者,您可以在同一个sbt会话中多次启动测试时获得意外结果。