Настройка проекта для AndroidX Test

AndroidX Test — это набор библиотек Jetpack, который позволяет запускать тесты приложений Android. Он также предоставляет ряд инструментов, которые помогут вам написать эти тесты.

Например, AndroidX Test предоставляет правила JUnit4 для запуска действий и взаимодействия с ними в тестах JUnit4. Он также содержит среды тестирования пользовательского интерфейса, такие как Espresso, UI Automator и симулятор Robolectric.

Добавьте тестовые библиотеки AndroidX

Чтобы использовать AndroidX Test, вам необходимо изменить зависимости проекта приложения в среде разработки.

Добавить зависимости Gradle

Чтобы изменить зависимости проекта приложения, выполните следующие действия:

  • Шаг 1. Откройте файл build.gradle для вашего модуля Gradle.
  • Шаг 2. Убедитесь, что в разделе «Репозитории» отображается репозиторий Google Maven:
  allprojects {
    repositories {
      jcenter()
      google()
    }
  }
  • Шаг 3. Для каждого тестового пакета AndroidX, который вы хотите использовать, добавьте имя его пакета в раздел зависимостей. Например, чтобы добавить пакет espresso-core , добавьте следующие строки:

классный

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

Котлин

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

Это наиболее распространенные доступные зависимости AndroidX Test:

классный

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"
}

Котлин

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")
}

Страница «Примечания к выпуску» содержит таблицу с последними версиями для каждого артефакта.

Обратитесь к указателю пакетов или указателю классов для получения конкретной справочной документации по этим библиотекам.

Проекты, использующие устаревшие классы

Если ваше приложение использует тесты, основанные на устаревших классах android.test на основе JUnit3, таких как InstrumentationTestCase и TestSuiteLoader , добавьте следующие строки в раздел android файла:

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

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

Добавить декларации манифеста

Чтобы запустить тесты, основанные на устаревших классах android.test на основе JUnit3, добавьте необходимые элементы <uses-library> в манифест вашего тестового приложения. Например, если вы добавляете тесты, зависящие от библиотеки android.test.runner , добавьте в манифест вашего приложения следующий элемент:

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

Чтобы определить библиотеку, содержащую данный класс на основе JUnit, см. раздел Библиотеки на основе JUnit .

Рекомендации по использованию устаревших классов и ориентации на Android 9 или

выше

Рекомендации в этом разделе применимы только в том случае, если вы ориентируетесь на Android 9 (уровень API 28) или более позднюю версию , а минимальная версия SDK для вашего приложения установлена ​​на Android 9.

Библиотека android.test.runner неявно зависит от библиотек android.test.base и android.test.mock . Если ваше приложение использует только классы из android.test.base или android.test.mock , вы можете включить библиотеки отдельно:

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