Lollipop以下的Android版本的Android检测测试失败

时间:2018-12-18 18:09:01

标签: android testing gradle automated-tests android-espresso

从今天开始,我正在寻找解决问题的方法,这就是我提交该问题的原因。

我使用Espresso来运行Android测试。一切都适用于Lollipop和更高版本,但不适用于较旧的Android版本(从该项目的目标API 16到第一个工作版本的API 21)。

我的问题是,用于测试的文件是Android Lollipop和更高版本的/androidTest文件夹中的文件,但对于较旧的版本,它使用的是默认的“模拟”风格。
例如,我在/ mock和/ androidTest文件夹中都有一个UserManager类,并且我需要测试才能在/ androidTest目录中使用该类。
你知道如何纠正吗?这只会破坏针对Android 4.x的测试,对于较新的版本,预期的行为会发生,所以我真的很失望。
我尝试设置sourceSets,但无法解决我的问题。
我看到multiDex可能会干扰androidTest,所以我尝试了一些对其他人有用的解决方案,但它也无法解决。
如果有人可以提供帮助,我会采取任何建议。

谢谢

Android Studio 3.2.1
摇篮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 :(得分:0)

好吧,我终于找到了解决我问题的方法。

感谢this post,我发现这是一个多线程问题。

因此,我在项目中添加了一个proguard规则文件,并在build.gradle中添加了以下几行:

<text>

proguard-multidex-rules.pro的内容:

<tspan>

现在,最后要做的是在检测测试中需要的每个类声明之前添加buildTypes { debug { // Other debug settings multiDexKeepProguard file('proguard-multidex-rules.pro') } } 批注。它对我有用,现在用于测试的文件是带注释的(found here)。

问题已解决