我正在使用 Play 2 设置一个项目,并且我已经能够使用 Eclipse 远程调试来调试 webapp。不过,我也想在我的测试中使用断点。有谁知道如何设置单元测试的远程调试?
3 回答
这是因为 Play (SBT) 为测试分叉了单独的 JVM,而没有远程调试所需的选项。您至少有两个选择:禁用新 JVM 的分叉,将其他选项传递给用于测试的 JVM。
要禁用 fork,请修改 Build.scala,添加fork in (Test) := false
,请参阅下面的完整 Build.scala 示例:
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
)
}
要传递其他选项,请添加您可以使用以下代码:
val main = play.Project(appName, appVersion, appDependencies).settings(
Keys.javaOptions in (Test) +=
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
)
您需要将 IDE 配置为使用端口 9998 来附加到测试。此外,每次运行测试时都需要重新附加调试器,这可能很不方便。
我使用 eclipse 或者更确切地说是 scala ide
而不是运行“播放”我运行这个命令“播放调试”然后播放会打印这个消息:
Listening for transport dt_socket at address: 9999
将出现正常的 $ 播放提示。然后输入这个命令“运行”
从eclipse,我设置断点并单击“运行->调试配置...”在左侧查找“远程Java应用程序”并单击“启动新配置”(小图标,左上角,看起来像一个“新文档”图标)。默认端口为 8000,将其更改为 9999 并更改机器,很可能您将使用 localhost。并单击 [调试] 按钮
应该这样做。只需在浏览器上正常加载,http://localhost:9000
只需等待应用程序到达断点即可。
通过在测试环境中禁用分叉和并行执行,您可以调试测试。只有你应该在你的build.sbt
文件末尾添加这些行:
parallelExecution in Test := false
fork in Test := false