Тесты Android не пройдены для версий Android ниже Lollipop - PullRequest
0 голосов
/ 18 декабря 2018

Уже день, когда я ищу решение своей проблемы, поэтому я отправляю его.

Я использую Espresso для запуска тестов Android.Все отлично работает для Lollipop и новее, но не для более старых версий Android (от API 16, который является целью проекта, до API 21, который является первой рабочей версией).

Моя проблема в том, что файлы, используемые для тестовони находятся в папке /androidTest для Android Lollipop и новее, но для более старых версий используется вариант по умолчанию, который называется «mock».
Например, у меня есть класс UserManager в папках / mock и / androidTest, и янужны тесты, чтобы использовать один из каталога / androidTest.
Знаете ли вы, как это исправить?Это нарушает тесты только для Android 4.x, для более новых версий ожидаемое поведение происходит, поэтому я действительно разочарован.
Я попытался установить sourceSets, но это не решило мою проблему.
Я увидел, что multiDex может помешатьс androidTest, поэтому я попробовал некоторые решения, которые работали для других, но это тоже не помогло.
Я бы посоветовал, если кто-то может помочь.

Спасибо

Android Studio 3.2.1
Gradle 4,6

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "my.app"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode Integer.parseInt(app_version_code)
        versionName app_version_name
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
}

dependencies {
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.json:json:20140107'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-intents:3.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
}

1 Ответ

0 голосов
/ 19 декабря 2018

Хорошо, я наконец-то нашел решение для своей проблемы.

Благодаря этой записи Я понял, что это проблема мультидекса.

Поэтому я добавил proguardФайл правил в моем проекте, и я добавил эти строки в свой build.gradle:

buildTypes {
    debug {
      // Other debug settings
      multiDexKeepProguard file('proguard-multidex-rules.pro')
    }
}

Содержимое proguard-multidex-rules.pro:

-keep class android.support.test.internal** { *; }
-keep class org.junit.** { *; }
-keep @com.google.common.annotations.VisibleForTesting class *

-keepclasseswithmembers class * {
  @com.google.common.annotations.VisibleForTesting *;
}

Теперь последнеедля этого нужно добавить аннотацию @VisibleForTesting перед каждым объявлением класса, которое вам нужно в ваших инструментальных тестах.Это сработало для меня, и теперь файлы, используемые для тестов, аннотированы ( найдено здесь ).

Проблема решена

...