Я пытаюсь написать тест 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 репозиториев
Попытка исправить 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.