Jetez un oeil à l'officiel documentation . La section Inclure les dépendances du framework donne un exemple de la façon de configurer un test unitaire local pour travailler avec l'environnement = Android sdk. Mais si vous faites tout comme dans l'exemple, le test ne démarre pas. J'obtiens une erreur à la place
Java.lang.IllegalStateException: aucune instrumentation enregistrée! Doit fonctionner sous une instrumentation d'enregistrement.
Toutes les tentatives ont été faites sur un nouveau projet. Android Studio 3.3, gradle-4.10.1, build: gradle: 3.3.0, Kotlin, et inclut des artefacts Androidx.
Puis ajouté les lignes suivantes au projet avec la configuration spécifiée:
build.gradle
Android {
// ...
testOptions {
unitTests.includeAndroidResources = true
}
}
dependencies {
// ...
// Already exist
testImplementation 'junit:junit:4.12'
// Added this line
testImplementation 'androidx.test:core:1.0.0'
}
Et le corps d'épreuve lui-même:
package com.example.myapplication
import Android.content.Context
import androidx.test.core.app.ApplicationProvider
import org.junit.Test
class ExampleUnitTest {
val context = ApplicationProvider.getApplicationContext<Context>()
@Test
fun readStringFromContext_LocalizedString() {
System.out.println(context.applicationInfo.packageName)
}
}
Qu'est-ce que je fais mal?
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
Android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 15
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'
}
}
testOptions {
unitTests.includeAndroidResources = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
implementation 'androidx.core:core-ktx:1.1.0-alpha03'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
testImplementation 'junit:junit:4.12'
testImplementation 'androidx.test:core:1.0.0'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}
Mise à jour:
Vous ne devriez plus rencontrer cette erreur si vous utilisez la dernière version de Gradle.
Je suppose que vous devez inclure la dépendance Robolectric dans votre build.gradle
et spécifiez également le lanceur de test pour votre test:
@RunWith(RobolectricTestRunner.class)
class ExampleUnitTest {
Après cela, cela a fonctionné pour moi. Je ne sais pas pourquoi ces informations ne sont pas incluses dans la documentation Android.