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

时间:2016-05-10 00:26:33

标签: android android-studio android-testing

我有一些自定义测试运行器的Android测试测试程序,在我升级到Android Studio 2.1之后的某些时候似乎都运行良好,一些库版本增加,并且随着时间的推移做了一些其他事情。现在,我的测试已经不再使用已经被问过StackOverflow一百万次的可怕Unable to find instrumentation info for: ComponentInfo{}

经过进一步调查,似乎Android Studio根本无法编译我的测试代码,这意味着它的代码永远不会包含在内,因此无法为测试运行器找到ComponentInfo。我通过在测试代码中添加编译错误来验证,当我尝试运行测试时,这不会导致任何问题。

此外,测试代码似乎被视为语法高亮显示中的非测试代码?例如,测试运行器导入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 ....主app和测试都使用相同的包

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'

测试的运行/调试配置也很简单 - 它是Android测试,仪表运行器是com.package.TestRunner。我多次尝试清洁/重建。

1 个答案:

答案 0 :(得分:4)

答案是如此令人尴尬,以至于我不应该发布它。

"构建变体"因为我的所有模块都被设置为" Release"所以没有编译任何测试内容。将其设置为" Debug"照顾好了这个问题。如果Android Studio对它有更多的声音会更好,比如警告在使用发布分片时运行测试。