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 e interactuar con ellas en pruebas de JUnit4. También contiene frameworks de prueba 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 la app en tu 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 Maven de Google:
  allprojects {
    repositories {
      jcenter()
      google()
    }
  }
  • Paso 3: Para cada paquete de AndroidX Test que desees usar, agrega su nombre 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 más comunes de AndroidX Test 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 la clase para obtener documentación de referencia específica sobre estas bibliotecas.

Proyectos que usan clases obsoletas

Si la app usa pruebas que dependen de clases android.test obsoletas basadas en JUnit3 , 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 dependan de clases android.test obsoletas basadas en JUnit3, 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 basada en JUnit, consulta Bibliotecas basadas en JUnit.

Consideraciones para usar clases obsoletas y orientar a Android 9 o

más alta

Las instrucciones que se brindan en esta sección solo se aplican si tienes como objetivo Android 9 (nivel de API 28) o versiones posteriores y la versión mínima del SDK para tu app se establece en Android 9.

La biblioteca android.test.runner depende implícitamente 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 de la siguiente manera:

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