无法在Android Studio中使用调试器运行Robolectric单元测试
自版本0.6.1以来,我一直在Android Studio的调试器下成功运行Robolectric单元测试 现在我无法获得以下错误无法在Android Studio中使用调试器运行Robolectric单元测试,android,unit-testing,gradle,android-studio,robolectric,Android,Unit Testing,Gradle,Android Studio,Robolectric,自版本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)
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,但它们现在都不起作用。我正在使用android构建工具版本19.1.0,已经使用了一段时间,它确实可以与他们一起使用
可能是Mac OS X下的本地安全设置吗?我们将感激地接受任何援助
**更新**
我发现这个问题是由在运行单元测试任务之前运行额外的JavaExec任务引起的。gradle似乎正在为第一个任务运行JVM,并将调试参数传递给它,例如-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=49807任务完成后JVM退出。Gradle然后运行实际的单元测试,并期望新的JVM在同一端口上侦听调试器进行连接,而调试器没有进行连接,因此连接失败
我如何防止之前的任务ormlite数据库编译任务在调试器下运行,或者强制gradle识别单元测试任务将使用新的JVM运行,从而更改单元测试的JVMARG以反映新的调试端口?我通过将数据库编译任务改为Exec任务而不是而不是JavaExec任务。exec任务定义如下,因此数据库编译是作为一个外部java进程执行的,而不是gradle调用的进程。这防止了调试JVM被数据库编译任务“消耗”
task (taskName type: Exec) {
def mainClass = "com.some.class"
def classPath = "${buildDir}/intermediates/classes/${flavorName}/${buildType.name}" + ":" + configurations.databaseCompile.asPath
commandLine "java", "-cp", classPath, mainClass, configDirName
}