在游戏中调试测试

时间:2014-04-30 14:01:20

标签: java debugging testing playframework playframework-2.0

我在尝试调试Play中失败的测试时遇到问题。

起初我无法让它达到一个突破点,结果是由于测试时发生的新JVM的分叉造成的,所以我发现我需要添加:

javaOptions in Test ++= Seq(
    "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
)

build.sbt文件。

现在它在我启动调试器时遇到了断点(我正在使用IntelliJ),但问题是它不会让我在启动测试之前启动调试器。

如果我使用play debug然后播放开始并打开套接字(9999)然后我可以启动调试器,然后才能在播放控制台启动我的应用程序(使用运行),但我不能这样做与测试相同..
一旦我使用play test测试开始,所以我必须在测试开始运行后启动调试器。

有什么方法可以解决这个问题吗? 谢谢!

1 个答案:

答案 0 :(得分:4)

这就是我如何做到这一点,希望能帮助别人。

更改build.sbt或build.scala以删除分支每个测试的默认选项。在(测试)中添加 Keys.fork行:= false

val main = play.Project(appName, appVersion, appDependencies).settings(
  resolvers += Resolver.sonatypeRepo("snapshots"),
    resolvers += Resolver.sonatypeRepo("releases"),
    Keys.fork in (Test) := false
)

我使用以下命令启动我的播放会话(我现在使用激活器),我将其存储为别名。

'JAVA_HOME=`/usr/libexec/java_home -v 1.7`; JAVA_OPTS="-Xms1g -Xloggc:gc.log -verbose:gc -XX:+PrintGCDateStamps -server -Xmx2g -Dhttps.port=9443" activator -jvm-debug 9999'

这样您就可以在调试模式下开始播放,并将想法附加到远程服务器。在intelliJ中你添加

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999

并在上面的案例中将端口设置为 localhost 9999

我喜欢这样做的原因是你启动播放服务器一次并将ide附加到远程服务器。然后,您可以通过控制台运行测试,它将触及您的断点,无需重新启动并为每个测试附加ide。