9

我正在使用 Play 2 设置一个项目,并且我已经能够使用 Eclipse 远程调试来调试 webapp。不过,我也想在我的测试中使用断点。有谁知道如何设置单元测试的远程调试?

4

3 回答 3

12

这是因为 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 来附加到测试。此外,每次运行测试时都需要重新附加调试器,这可能很不方便。

于 2013-04-10T08:39:32.983 回答
0

我使用 eclipse 或者更确切地说是 scala ide

而不是运行“播放”我运行这个命令“播放调试”然后播放会打印这个消息:

Listening for transport dt_socket at address: 9999

将出现正常的 $ 播放提示。然后输入这个命令“运行”

从eclipse,我设置断点并单击“运行->调试配置...”在左侧查找“远程Java应用程序”并单击“启动新配置”(小图标,左上角,看起来像一个“新文档”图标)。默认端口为 8000,将其更改为 9999 并更改机器,很可能您将使用 localhost。并单击 [调试] 按钮

应该这样做。只需在浏览器上正常加载,http://localhost:9000只需等待应用程序到达断点即可。

于 2013-03-14T03:45:52.960 回答
0

通过在测试环境中禁用分叉和并行执行,您可以调试测试。只有你应该在你的build.sbt文件末尾添加这些行:

parallelExecution in Test := false
fork in Test := false
于 2017-04-11T13:33:55.140 回答