【发布时间】:2014-10-28 16:55:57
【问题描述】:
自 0.6.1 版以来,我一直在 Android Studio 的调试器下成功运行 Robolectric 单元测试
现在我无法得到以下错误
ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:750]
Could not write standard input into: Gradle Test Executor 1.
java.io.IOException: Broken pipe
我一直在编译设置中未选中 use in-process build 标志,虽然我目前使用的是 AS 0.8-14,但我已经回去尝试了 0.8-11、0.8-9 和 0.6-1,但没有一个在工作,在忙。我正在使用 19.1.0 版的 android 构建工具(并且已经使用了一段时间,并且可以与它们一起使用)。
会不会是 Mac OS X 下的一些本地安全设置?如有任何帮助,我们将不胜感激。
** 更新 **
我发现该问题是由在运行单元测试任务之前运行额外的 JavaExec 任务引起的。似乎 gradle 正在为第一个任务运行 JVM 并将调试参数传递给它,例如-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=49807 任务完成,JVM 退出。 Gradle 然后运行实际的单元测试,并期望新的 JVM 在同一个端口上侦听以供调试器连接 - 它没有,因此会出现连接失败。
如何防止先前的任务(ormlite 数据库编译任务)在调试器下运行或强制 gradle 识别单元测试任务将使用新的 JVM 运行,因此更改单元测试的 jvmArgs 以反映新的调试端口?
【问题讨论】:
标签: android unit-testing gradle android-studio robolectric