Configurer un projet pour AndroidX Test

AndroidX Test est un ensemble de bibliothèques Jetpack qui vous permettent d'exécuter des tests sur des applications Android. Il fournit également une série d'outils pour vous aider à écrire ces tests.

Par exemple, AndroidX Test fournit des règles JUnit4 pour démarrer des activités et interagir avec elles dans les tests JUnit4. Il contient également des frameworks de test d'interface utilisateur tels qu'Espresso, UI Automator et le simulateur Robolectric.

Ajouter des bibliothèques AndroidX Test

Pour utiliser AndroidX Test, vous devez modifier les dépendances de votre projet d'application dans votre environnement de développement.

Ajouter des dépendances Gradle

Pour modifier les dépendances de votre projet d'application, procédez comme suit:

  • Étape 1: Ouvrez le fichier build.gradle de votre module Gradle.
  • Étape 2: Dans la section des dépôts, assurez-vous que le dépôt Maven de Google s'affiche:
  allprojects {
    repositories {
      jcenter()
      google()
    }
  }
  • Étape 3: Pour chaque package de test AndroidX que vous souhaitez utiliser, ajoutez son nom à la section des dépendances. Par exemple, pour ajouter le package espresso-core, ajoutez les lignes suivantes:

Groovy

dependencies {
        ...
        androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
    }

Kotlin

dependencies {
        ...
        androidTestImplementation('androidx.test.espresso:espresso-core:$espressoVersion')
    }

Voici les dépendances AndroidX Test les plus courantes:

Groovy

dependencies {
    // Core library
    androidTestImplementation "androidx.test:core:$androidXTestVersion0"

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation "androidx.test:runner:$testRunnerVersion"
    androidTestImplementation "androidx.test:rules:$testRulesVersion"

    // Assertions
    androidTestImplementation "androidx.test.ext:junit:$testJunitVersion"
    androidTestImplementation "androidx.test.ext:truth:$truthVersion"

    // Espresso dependencies
    androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-accessibility:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-web:$espressoVersion"
    androidTestImplementation "androidx.test.espresso.idling:idling-concurrent:$espressoVersion"

    // The following Espresso dependency can be either "implementation",
    // or "androidTestImplementation", depending on whether you want the
    // dependency to appear on your APK’"s compile classpath or the test APK
    // classpath.
    androidTestImplementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
}

Kotlin

dependencies {
    // Core library
    androidTestImplementation("androidx.test:core:$androidXTestVersion")

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation("androidx.test:runner:$testRunnerVersion")
    androidTestImplementation("androidx.test:rules:$testRulesVersion")

    // Assertions
    androidTestImplementation("androidx.test.ext:junit:$testJunitVersion")
    androidTestImplementation("androidx.test.ext:truth:$truthVersion")

    // Espresso dependencies
    androidTestImplementation( "androidx.test.espresso:espresso-core:$espressoVersion")
    androidTestImplementation( "androidx.test.espresso:espresso-contrib:$espressoVersion")
    androidTestImplementation( "androidx.test.espresso:espresso-intents:$espressoVersion")
    androidTestImplementation( "androidx.test.espresso:espresso-accessibility:$espressoVersion")
    androidTestImplementation( "androidx.test.espresso:espresso-web:$espressoVersion")
    androidTestImplementation( "androidx.test.espresso.idling:idling-concurrent:$espressoVersion")

    // The following Espresso dependency can be either "implementation",
    // or "androidTestImplementation", depending on whether you want the
    // dependency to appear on your APK"s compile classpath or the test APK
    // classpath.
    androidTestImplementation( "androidx.test.espresso:espresso-idling-resource:$espressoVersion")
}

La page Notes de version contient un tableau présentant les dernières versions par artefact.

Consultez l'index de packages ou l'index de classes pour obtenir une documentation de référence spécifique sur ces bibliothèques.

Projets utilisant des classes obsolètes

Si votre application utilise des tests qui reposent sur des classes android.test obsolètes basées sur JUnit3 , telles que InstrumentationTestCase et TestSuiteLoader, ajoutez les lignes suivantes dans la section android du fichier:

android {
    ...
    useLibrary 'android.test.runner'

    useLibrary 'android.test.base'
    useLibrary 'android.test.mock'
  }

Ajouter des déclarations de fichier manifeste

Pour exécuter des tests qui reposent sur des classes android.test obsolètes basées sur JUnit3, ajoutez les éléments <uses-library> nécessaires au fichier manifeste de votre application de test. Par exemple, si vous ajoutez des tests qui dépendent de la bibliothèque android.test.runner, ajoutez l'élément suivant au fichier manifeste de votre application:

<!-- You don't need to include android:required="false" if your app's

   minSdkVersion is 28 or higher. -->

<uses-library android:name="android.test.runner"

       android:required="false" />

Pour déterminer la bibliothèque qui contient une classe basée sur JUnit donnée, consultez la section Bibliothèques basées sur JUnit.

Points à prendre en compte si vous utilisez des classes obsolètes et que vous ciblez Android 9 ou

de plus

Les conseils de cette section ne s'appliquent que si vous ciblez Android 9 (niveau d'API 28) ou une version ultérieure et si la version minimale du SDK pour votre application est définie sur Android 9.

La bibliothèque android.test.runner dépend implicitement des bibliothèques android.test.base et android.test.mock. Si votre application n'utilise que des classes de android.test.base ou android.test.mock, vous pouvez inclure les bibliothèques par elles-mêmes:

<!-- For both of these declarations, you don't need to include
   android:required="false" if your app's minSdkVersion is 28
   or higher. -->

<uses-library android:name="android.test.base"
       android:required="false" />
<uses-library android:name="android.test.mock"
       android:required="false" />