正在调试测试

Nit*_*mer 4 java testing debugging playframework playframework-2.0

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

起初,我无法使其达到断点,这是由测试时发生的新JVM分叉导致的,因此我发现我需要添加:

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

build.sbt文件。

现在,当我启动调试器时(我正在使用IntelliJ),它达到了断点,但问题是它不允许我在开始测试之前启动调试器。

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

有没有办法解决?
谢谢!

Sha*_*der 5

我就是这样做的,希望对其他人有帮助。

更改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
)
Run Code Online (Sandbox Code Playgroud)

我使用以下存储为别名的命令开始播放会话(我现在正在使用激活器)。

'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'
Run Code Online (Sandbox Code Playgroud)

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

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
Run Code Online (Sandbox Code Playgroud)

并在上述情况下将端口设置为其localhost 9999

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