Robolectri c не удалось загрузить время ожидания подключения - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь написать тест Robolectri c для моего приложения Kotlin, и я не могу запустить мой тест, поскольку он не может загрузить Robolectri c. Я искал в StackOverflow и Google, и ни одно из предложений не решило мою проблему, поэтому мой вопрос здесь.

Я использую Android Studio 3.6

Я вижу ошибку

Downloading from maven 
Downloading: org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.pom from repository sonatype at https://oss.sonatype.org/content/groups/public/
Error transferring file: Connection timed out: connect
[WARNING] Unable to get resource 'org.robolectric:android-all:pom:9-robolectric-4913185-2' from repository sonatype (https://oss.sonatype.org/content/groups/public/): Error transferring file: Connection timed out: connect
Downloading: org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.pom from repository central at http://repo1.maven.org/maven2
Error transferring file: Connection timed out: connect
[WARNING] Unable to get resource 'org.robolectric:android-all:pom:9-robolectric-4913185-2' from repository central (http://repo1.maven.org/maven2): Error transferring file: Connection timed out: connect
Downloading: org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/
Error transferring file: Connection timed out: connect
[WARNING] Unable to get resource 'org.robolectric:android-all:jar:9-robolectric-4913185-2' from repository sonatype (https://oss.sonatype.org/content/groups/public/): Error transferring file: Connection timed out: connect
Downloading: org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.jar from repository central at http://repo1.maven.org/maven2
Error transferring file: Connection timed out: connect
[WARNING] Unable to get resource 'org.robolectric:android-all:jar:9-robolectric-4913185-2' from repository central (http://repo1.maven.org/maven2): Error transferring file: Connection timed out: connect


Unable to resolve artifact: Missing:
----------
1) org.robolectric:android-all:jar:9-robolectric-4913185-2

  Try downloading the file manually from the project website.

  Then, install it using the command: 
      mvn install:install-file -DgroupId=org.robolectric -DartifactId=android-all -Dversion=9-robolectric-4913185-2 -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=org.robolectric -DartifactId=android-all -Dversion=9-robolectric-4913185-2 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
    1) org.apache.maven:super-pom:pom:2.0
    2) org.robolectric:android-all:jar:9-robolectric-4913185-2

----------
1 required artifact is missing.

for artifact: 
  org.apache.maven:super-pom:pom:2.0

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  sonatype (https://oss.sonatype.org/content/groups/public/)

"build.gradle" моего приложения

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 28

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

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

    kotlinOptions {
        jvmTarget = "1.8"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    testOptions {
        unitTests {
            includeAndroidResources = true
            returnDefaultValues = true
            all {
                systemProperty 'robolectric.dependency.repo.url', 'https://repo1.maven.org/maven2/'
            }
        }
    }
}

dependencies {
    // == APP DEPENDENCIES == 
    // excluded as not applicable for this question

    // == TEST DEPENDENCIES ==      
    testImplementation 'org.mockito:mockito-inline:2.25.0'
    testImplementation 'io.kotlintest:kotlintest-runner-junit5:3.3.2'
    testImplementation 'junit:junit:4.12'
    testImplementation 'androidx.test:runner:1.1.0-alpha4'
    testImplementation "androidx.test.ext:junit-ktx:1.1.1"
    testImplementation "androidx.test:core-ktx:1.2.0"
    testImplementation "org.robolectric:robolectric:4.3.1"
    testImplementation "androidx.arch.core:core-testing:2.1.0"

}

Мой тест

@RunWith(RobolectricTestRunner::class)
class MyTest {
    @Rule @JvmField
    val instantExecutorRule = InstantTaskExecutorRule()

    @Before
    @Throws(Exception::class)
    fun setUp() {
        // set up all my mock objects
    }

    @Test
    fun test1() {
       ....
    }
}

Не удается найти robolectri c на URL-адресах 2 репозиториев

  • Я попытался получить доступ к "https://oss.sonatype.org/content/groups/public/", и я получаю ошибку "Список каталогов запрещен". Когда я удаляю трейлинг / из URL, я получаю сообщение об ошибке «Не удается найти эту страницу oss.sonatype.org»

  • Переход к «https://repo1.maven.org/maven2 "(это должен быть https, а не http) нет дочерней папки для" robolectri c "

Попытка исправить 1: прокси

В одном ответе говорилось, что проблема связана с прокси. У меня установлены прокси в "gradle.properties", и нет проблем с загрузкой других зависимостей.

systemProp.http.proxyHost=myproxy-server.com
systemProp.https.proxyPort=80
systemProp.https.proxyHost=myproxy-server.com
systemProp.http.proxyPort=80

Попытка исправить 2: build.gradle сообщает ему использовать репозитории maven

В одном ответе указывается репозиторий maven для загрузки robolectri c. Но это не имеет значения.

testOptions {
    unitTests {
        all {
            systemProperty 'robolectric.dependency.repo.url', 'https://repo1.maven.org/maven2/'
        }
    }

Попытка исправить 3: включить "mavenCental ()" в мои репозитории

Я попытался добавить "mavenCentral ()" в мой файл "build.gradle", и это не помогло.

buildscript {
    ext.kotlin_version = '1.3.31'

    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

Предлагаемое решение "enableUnitTestBinaryResources"

В другом посте сказано добавить "android .enableUnitTestBinaryResources = true "для gradle.properties.

Инструкции robolectri c говорят, что эта конфигурация не нужна с Android Studio 3.3+, и я использую AS 3.6.

1 Ответ

0 голосов
/ 17 марта 2020

Я не подключился к VPN, и robolectri c загружен нормально. Поэтому проблема, вероятно, заключалась в том, что у меня неправильные настройки в моих настройках прокси.

...