Cómo configurar el proyecto para AndroidX Test

AndroidX Test es una colección de bibliotecas de Jetpack que te permite ejecutar pruebas en apps para Android. También proporciona una serie de herramientas para ayudarte a escribir estas pruebas.

Por ejemplo, AndroidX Test proporciona reglas de JUnit4 para iniciar actividades y, luego, interactuar con ellas en pruebas de JUnit4. También contiene frameworks de pruebas de IU, como Espresso, UI Automator y el simulador de Robolectric.

Cómo agregar bibliotecas de Android Test

Para usar AndroidX Test, debes modificar las dependencias del proyecto de tu app en el entorno de desarrollo.

Agrega dependencias de Gradle

Para modificar las dependencias del proyecto de tu app, completa los siguientes pasos:

  • Paso 1: Abre el archivo build.gradle de tu módulo de Gradle.
  • Paso 2: En la sección de repositorios, asegúrate de que aparezca el repositorio de Maven de Google:
  allprojects {
    repositories {
      jcenter()
      google()
    }
  }
  • Paso 3: Para cada paquete de prueba de AndroidX que quieras usar, agrega su nombre de paquete a la sección de dependencias. Por ejemplo, para agregar el paquete espresso-core, agrega las siguientes líneas:

Groovy

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

Kotlin

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

Estas son las dependencias de AndroidX Test más comunes disponibles:

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 página Notas de la versión contiene una tabla con las versiones más recientes por artefacto.

Consulta el Índice de paquetes o el Índice de clases para obtener documentación de referencia específica sobre estas bibliotecas.

Proyectos que usan clases obsoletas

Si tu app usa pruebas que dependen de clases android.test basadas en JUnit3 obsoletas , como InstrumentationTestCase y TestSuiteLoader, agrega las siguientes líneas en la sección android del archivo:

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

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

Cómo agregar declaraciones en el manifiesto

Para ejecutar pruebas que dependen de clases android.test basadas en JUnit3 obsoletas, agrega los elementos <uses-library> necesarios al manifiesto de tu app de prueba. Por ejemplo, si agregas pruebas que dependen de la biblioteca android.test.runner, agrega el siguiente elemento al manifiesto de tu app:

<!-- 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" />

Para determinar la biblioteca que contiene una clase determinada basada en JUnit, consulta Bibliotecas basadas en JUnit.

Consideraciones para usar clases obsoletas y segmentar Android 9 o versiones posteriores

mayor

Las instrucciones de esta sección solo se aplican si segmentas tu app para Android 9 (nivel de API 28) o versiones posteriores y la versión mínima del SDK de tu app está establecida en Android 9.

La biblioteca android.test.runner depende de forma implícita de las bibliotecas android.test.base y android.test.mock. Si tu app solo usa clases de android.test.base o android.test.mock, puedes incluir las bibliotecas por sí solas:

<!-- 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" />