测试代码未被编译并被视为非测试
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 在这方面多发声就好了,比如在使用发布分片时警告 运行 测试。
我有一些 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 在这方面多发声就好了,比如在使用发布分片时警告 运行 测试。