测试代码未被编译并被视为非测试

Test code not being compiled and treated as non-test

我有一些 Android 仪器测试和自定义测试 运行ner 似乎一切正常,直到我升级到 Android Studio 2.1 后的某个时候,提高了一些库版本,并随着时间的推移做了一些其他事情。现在,我的测试不再 运行 可怕的 Unable to find instrumentation info for: ComponentInfo{} 已经在 Whosebug 上被问过一百万次了。

经过进一步调查,似乎 Android Studio 根本没有编译我的测试代码,这意味着它的代码从未被包含,所以它找不到用于测试的 ComponentInfo 运行纳尔。我通过在我的测试代码中添加编译错误来验证这一点,当我尝试 运行 测试时,这不会导致任何问题。

此外,测试代码似乎在语法高亮器中被视为非测试代码?例如,测试 运行ner 导入 android.support.test.runner.AndroidJUnitRunner,但 runner 以红色突出显示,就好像该库丢失一样(但它在 gradle 文件中作为 androidTestCompile).如果我将其更改为 compile,语法荧光笔会很高兴。但是,测试代码以黄色显示在项目视图中,就像测试代码一样。

我不确定是什么决定了 Android Studio 为测试编译的内容。设置很简单。我的文件层次结构是

app
+--src
+  +--main
+  |  +--java
+  |     +--com/package/files
+  |
+  +--androidTest
+     +--java
+        +--com/package/files

换句话说,有 app/src/main/java/com/... 和 app/src/androidTest/java/com... 主应用程序和测试应用程序都使用相同的包。

build.gradle(相关部分):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 'Google Inc.:Google APIs:23'
    buildToolsVersion '24.0.0 rc3'
    defaultConfig {
        multiDexEnabled = true
        applicationId 'com.package'
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 2
        versionName '0.8a'
        signingConfig signingConfigs.release
        testInstrumentationRunner 'com.package.TestRunner'
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }
    productFlavors {
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    lintOptions {
        checkReleaseBuilds true
        abortOnError true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2'
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    androidTestCompile 'com.android.support:support-annotations:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    [...]
}

apply plugin: 'com.google.gms.google-services'

测试的 run/debug 配置也很简单 - 这是一个 Android 测试,仪器 运行ner 是 com.package.TestRunner。我试了很多次cleaning/rebuilding。

答案很尴尬,我不应该post。

我所有模块的 "Build Variant" 都设置为 "Release",因此编译了测试内容的 none。将它设置为 "Debug" 解决了这个问题。如果 Android Studio 在这方面多发声就好了,比如在使用发布分片时警告 运行 测试。