eclipsejunitplayframeworkplayframework-2.0jpda

How to debug tests with Play! 2.0


I am setting up a project using Play 2 and I am already able to debug the webapp using eclipse remote debugging. Though, I'd also like to use breakpoints along my tests. Does anyone know how setup unit tests' remote debugging?


Solution

  • This is happening since Play (SBT) forks separate JVM for tests, without options needed for remote debug. You have at least two options: disable fork of new JVM, pass additional options to JVM used for tests.

    To disable fork, modify Build.scala, add fork in (Test) := false, see full Build.scala example below:

    import sbt._
    import play.Project._
    
    object ApplicationBuild extends Build {
    
      val appName         = "so1"
      val appVersion      = "1.0-SNAPSHOT"
    
      val appDependencies = Seq(
        // Add your project dependencies here,
        javaCore,
        javaJdbc,
        javaEbean
      )
    
      val main = play.Project(appName, appVersion, appDependencies).settings(
        // Add your own project settings here
        Keys.fork in (Test) := false
      )
    }
    

    To pass additional options, add you can use this code:

      val main = play.Project(appName, appVersion, appDependencies).settings(
        Keys.javaOptions in (Test) += 
        "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
      )
    

    You will need to configure your IDE to use port 9998 to attach to tests. Also, you will need to re-attach debugger each time when you run tests, that could be inconvenient.