升级至Android 12后Espresso测试无执行用例,0测试通过如何解决?
解决方案
该问题是Android 12(API 31)对instrumentation测试运行机制调整、以及旧版本测试依赖的兼容缺陷共同导致的,可按照以下步骤排查解决:
- 第一步:升级测试相关依赖到适配API 31的兼容版本
你当前使用的androidx.test:runner:1.4.0、espresso-core:3.4.0存在已知的API 31兼容bug,将测试依赖升级至以下版本即可修复大部分兼容问题:
junit:junit:4.13.2 androidx.test.ext:junit-ktx:1.1.5 androidx.test:runner:1.5.2 androidx.test:rules:1.5.0 androidx.test.uiautomator:uiautomator:2.3.0 androidx.test.espresso:espresso-core:3.5.1 androidx.work:work-testing:2.8.1
- 第二步:调整AndroidManifest.xml配置
API 31要求所有配置了intent-filter的组件必须显式声明android:exported属性,若你测试用例中需要唤起的Activity、Service、BroadcastReceiver未配置该属性,会导致测试框架无法拉起对应组件,测试用例不会被执行。
同时可在测试用的manifest配置中,给instrumentation标签添加适配属性:
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="你的应用包名" android:functionalTest="true"/>
- 第三步:校验build.gradle测试配置
在模块级build.gradle的android.defaultConfig块中,确认测试运行器配置正确,添加测试参数适配API 31:
defaultConfig { // 其余原有配置保留 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments clearPackageData: 'true' }
- 第四步:清理缓存重跑测试
完成上述配置后依次执行:
- 点击Android Studio
File -> Invalidate Caches...清理IDE缓存 - 执行
./gradlew clean清理项目构建缓存 - 卸载测试设备上已安装的原应用和测试安装包,重新运行测试即可。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

