Robolectric 测试在启动时挂起 - 从 sonatype 传输
Robolectric test hangs up when started - Transferring from sonatype
我在项目中配置 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()
}
当我 运行 测试时,它挂断并在控制台上显示消息:
Downloading: org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/
Transferring 68498K from sonatype
我等了大约 10-15 分钟,但仍然没有。
我等了 30 分钟才下载完毕。我也在 3.0 版上试过这个 - 是同样的问题,但下载速度稍快。
我在这里做了一个问题:https://github.com/robolectric/robolectric/issues/3452
也许有办法提高下载速度之类的。
将这个添加到 build.gradle 中解决了我的问题:
android{
...
// Add these lines
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
可能是网络问题 latency/connection 问题取决于国家或其他网络问题。
有同样的问题,网络监视器显示 ~200kbs 网络下载 activity.
启用 VPN 后,它显示 ~100Mbs 网络 activity 并且需要几秒钟才能从 sonatype 下载。
受到 K.Os 的启发,我找到了一种从 Robolectric doc(http://robolectric.org/configuring/).
中指定 maven 存储库的方法
通过设置代理或镜像maven repo,并更改系统属性。从内部网络访问图书馆所需的时间更少。
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 提交了相同的答案。
我在项目中配置 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()
}
当我 运行 测试时,它挂断并在控制台上显示消息:
Downloading: org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/ Transferring 68498K from sonatype
我等了大约 10-15 分钟,但仍然没有。
我等了 30 分钟才下载完毕。我也在 3.0 版上试过这个 - 是同样的问题,但下载速度稍快。
我在这里做了一个问题:https://github.com/robolectric/robolectric/issues/3452
也许有办法提高下载速度之类的。
将这个添加到 build.gradle 中解决了我的问题:
android{
...
// Add these lines
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
可能是网络问题 latency/connection 问题取决于国家或其他网络问题。 有同样的问题,网络监视器显示 ~200kbs 网络下载 activity.
启用 VPN 后,它显示 ~100Mbs 网络 activity 并且需要几秒钟才能从 sonatype 下载。
受到 K.Os 的启发,我找到了一种从 Robolectric doc(http://robolectric.org/configuring/).
中指定 maven 存储库的方法通过设置代理或镜像maven repo,并更改系统属性。从内部网络访问图书馆所需的时间更少。
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 提交了相同的答案。