You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:01:11