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?
问题:
回答1:
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.
回答2:
i use eclipse or rather scala ide
instead of running "play" i run this command "play debug" then play would print this message:
Listening for transport dt_socket at address: 9999
the normal $ prompt for play would appear. then enter this command "run"
from eclipse, i set the breakpoint and click "Run -> Debug Configurations..." look for "Remote Java Application" on the left and click "Launch New Configuration" (small icon, top left, looks like a 'new document' icon). the default port would be 8000, change it to 9999 and change the machine, most probably you would be using localhost. and click on the [Debug] button
that should do it.
just load the normal http://localhost:9000
on your browser
just wait for the application to hit the breakpoint.
回答3:
By disabling fork and parallel executing in Test environment, You can debug tests.
Only you should add these lines end of Your build.sbt
file:
parallelExecution in Test := false
fork in Test := false