无法与调试器Android Studio中运行Robolectric单元测试

问题描述:

我已经成功运行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): No transports initialized [../../../src/share/back/debugInit.c:750] 
Could not write standard input into: Gradle Test Executor 1. 
java.io.IOException: Broken pipe 

我一直设置使用in-process build标志在编译设置中未选中,虽然我目前使用AS 0.8-14,但我已经回去尝试了0.8-11,0.8-9和0.6-1,但都没有在工作,在忙。我正在使用android build工具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运行,因此将单元测试的jvmArgs更改为反映新的调试端口?

我通过将数据库编译任务更改为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 
}