Android Studio无法识别插桩测试求助(多Flavor场景)
插桩测试未执行问题排查(多Flavor+自定义测试目录场景)
问题描述
我的应用包含pro和light两个Flavor版本,新增了androidTestLight和androidTestPro测试目录(加上默认的androidTest,共三个测试目录)。运行以下插桩测试代码后,Android Studio显示安装成功,但测试未执行,界面显示0/0测试。
测试代码:
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import org.junit.Test import org.junit.runner.RunWith import org.junit.Assert.* @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("com.xxxx.xxxx.pro", appContext.packageName) } }
环境与配置:
- Android Studio Dolphin | 2021.3.1 Patch 1
- Gradle 7.0.4
- compileSdkVersion 31、buildToolVersion 30.0.3、minSdkVersion 29
build.gradle的defaultConfig已配置testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"- 测试依赖配置:
testImplementation 'junit:junit:4.13.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' debugImplementation "androidx.fragment:fragment-testing:1.5.5" testImplementation "androidx.test:core-ktx:1.5.0" testImplementation "org.robolectric:robolectric:4.8" androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' androidTestImplementation "androidx.test.ext:junit-ktx:1.1.4" androidTestImplementation "androidx.test:rules:1.5.0" androidTestImplementation "androidx.test:runner:1.5.1" androidTestImplementation "androidx.test.uiautomator:uiautomator-v18:2.2.0-alpha1" androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.1.0"
注:普通单元测试可正常运行。
解决办法
1. 手动绑定Flavor与自定义测试目录
Gradle不会自动识别androidTestLight/androidTestPro这类命名的测试目录,需在模块build.gradle中配置sourceSets,将测试目录与对应Flavor关联:
android { flavorDimensions "version" productFlavors { pro { dimension "version" applicationId "com.xxxx.xxxx.pro" // 其他pro flavor配置 } light { dimension "version" applicationId "com.xxxx.xxxx.light" // 其他light flavor配置 } } sourceSets { androidTestPro { java.srcDirs = ['src/androidTestPro/java'] res.srcDirs = ['src/androidTestPro/res'] assets.srcDirs = ['src/androidTestPro/assets'] } androidTestLight { java.srcDirs = ['src/androidTestLight/java'] res.srcDirs = ['src/androidTestLight/res'] assets.srcDirs = ['src/androidTestLight/assets'] } } // 绑定测试变体与对应sourceSet variantFilter { variant -> def isTestVariant = variant.name.contains("AndroidTest") if (isTestVariant) { def flavorName = variant.flavors[0].name variant.sourceSets += sourceSets["androidTest${flavorName.capitalize()}"] } } }
2. 指定正确的测试运行变体
Android Studio默认可能选择通用测试变体,需手动切换到对应Flavor的测试变体:
- 右上角运行按钮旁下拉菜单 → 选择
Edit Configurations - 找到目标插桩测试配置,在
General标签页的Module下拉框中,选择对应变体(如:app:proDebugAndroidTest) - 保存配置后重新运行测试
3. 检查测试类包名匹配度
确保测试类所在包名与对应Flavor的应用包名完全一致,否则Instrumentation无法识别测试类。
4. 清理Gradle缓存
缓存异常可能导致测试识别失败:
- 点击顶部工具栏
File → Invalidate Caches... - 勾选
Invalidate and Restart,重启后重新运行测试
5. 排查依赖冲突
JUnit 4与JUnit 5混用可能引发识别问题,可暂时移除JUnit 5依赖测试:
// 注释或删除该行 // testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
内容的提问来源于stack exchange,提问作者Mr T
相关产品推荐
相关产品推荐

