Robolectric测试启动时卡住了——从Sonatype传输

8

我在我的项目中配置Robolectric时遇到了问题。如果使用Kotlin,则可能会有影响。

这是我的build.gradle文件:

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 26


testOptions {
    unitTests {
        includeAndroidResources = true
    }
}
sourceSets {
    test.java.srcDirs += ['build/generated/source/apt/test/debug']
}

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

ext.daggerVersion = '2.11'
ext.roomVersion = '1.0.0-alpha9'

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'

kaptTest "com.google.dagger:dagger-compiler:$daggerVersion"
testImplementation 'junit:junit:4.12'
testImplementation "org.robolectric:robolectric:3.4.2"
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

// Room
implementation "android.arch.persistence.room:runtime:$roomVersion"
implementation "android.arch.persistence.room:rxjava2:$roomVersion"
kapt "android.arch.persistence.room:compiler:$roomVersion"
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"
androidTestImplementation "android.arch.persistence.room:testing:$roomVersion"

//DAGGER
implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-android:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"

//Jackson
implementation 'com.fasterxml.jackson.core:jackson-core:2.9.1'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.1'

}

repositories {
mavenCentral()

当我运行测试时,它卡住了,并在控制台上显示以下消息:

正在下载:org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.jar,来自于sonatype仓库,地址为:https://oss.sonatype.org/content/groups/public/ 正在从sonatype传输68498K

我等了大约10-15分钟还是没有结果。

4个回答

5

4
我遇到了相同的问题,但为什么这个回答被接受了,因为它并没有提供官方解决方案? - GoRoS
我认为解决方案就是等待,由于某些原因下载速度非常慢。 - Emmanuel Mtali

1
受K.Os启发,我发现了一种从Robolectric文档(http://robolectric.org/configuring/)中指定maven仓库的方法。
通过设置代理或镜像maven仓库,并更改systemProperty。这样可以更快地从内部网络访问库。
    android {
      testOptions {
        unitTests.all {
          systemProperty 'robolectric.dependency.repo.url', 'https://local-mirror/repo'
          systemProperty 'robolectric.dependency.repo.id', 'local'
        }
      }
    }

对我来说有效,因为CI流水线任务始终在机器上运行,在该机器上因安全策略而限制了互联网访问。当Robolectric尝试从默认的maven url下载其依赖项时,可能会导致卡住。

我也向https://github.com/robolectric/robolectric/issues/3452提交了相同的答案。


0
可能是由于网络延迟、连接问题或国家等其他网络问题导致的。我曾经遇到过同样的问题,网络监视器显示大约为200kbs的网络下载活动。
启用 VPN 之后,它显示大约100Mbs的网络活动,并且从 sonatype 下载需要几秒钟时间。

0

在build.gradle中添加以下内容解决了我的问题:

android{
    ...

    // Add these lines
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接