web-dev-qa-db-fra.com

Construire des tests unitaires locaux (Aucune instrumentation enregistrée! Doit s'exécuter sous une instrumentation d'enregistrement)

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'
}
8
maXp

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.

4
Vadim Kotov