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

如何让Mock数据仅对Test和AndroidTest可见,避免主代码访问?

解决主应用代码可访问测试Mock数据的问题

核心思路

通过创建独立的测试辅助源码集,让单元测试(test)和Instrumented测试(androidTest)依赖该源码集,同时完全隔离主应用源码集的访问权限,彻底避免主代码导入Mock数据。

具体配置步骤

1. 配置Gradle源码集

在app/build.gradle(Groovy语法)中添加如下配置:

android {
    sourceSets {
        // 定义testHelper源码集,指定其源码目录
        testHelper {
            java.srcDirs = ['src/testHelper/java']
            resources.srcDirs = ['src/testHelper/resources']
        }

        // 让单元测试依赖testHelper的编译输出
        test {
            compileClasspath += testHelper.output
            runtimeClasspath += testHelper.output
        }

        // 让Instrumented测试依赖testHelper的编译输出
        androidTest {
            compileClasspath += testHelper.output
            runtimeClasspath += testHelper.output
        }
    }
}

// 配置testHelper的依赖(和测试环境保持一致)
dependencies {
    testHelperImplementation files(android.getBootClasspath())
    testHelperImplementation 'junit:junit:4.13.2'
    // 添加Mock相关依赖,比如Mockito、MockK等
}

如果使用Kotlin DSL(build.gradle.kts),对应配置如下:

android {
    sourceSets {
        val testHelper by creating {
            java.srcDir("src/testHelper/java")
            resources.srcDir("src/testHelper/resources")
        }
        val test by getting {
            compileClasspath += testHelper.output
            runtimeClasspath += testHelper.output
        }
        val androidTest by getting {
            compileClasspath += testHelper.output
            runtimeClasspath += testHelper.output
        }
    }
}

dependencies {
    val testHelper by configurations
    testHelper(files(android.bootClasspath))
    testHelper("junit:junit:4.13.2")
    // 添加Mock相关依赖
}

2. 调整目录结构

确保testHelper目录位于src下,遵循标准源码集结构:

app/src/
├── main/           # 主应用源码
├── test/           # 单元测试源码
├── androidTest/    # Instrumented测试源码
└── testHelper/
    └── java/
        └── [你的包名]/AppMockData.kt/java

3. 验证效果

配置完成后,执行clean和compileDebugSources任务清理缓存并编译主代码,此时主应用代码尝试导入AppMockData会直接报编译错误,而测试代码仍可正常访问Mock数据。

原配置无效的原因

直接将testHelper目录添加到test和androidTest的java.srcDirs,本质是让测试源码集将该目录视为自身的源码目录,但Gradle的源码集隔离机制可能因路径配置不规范或缓存问题失效。使用独立源码集的方式是官方推荐的规范做法,能彻底避免主源码集访问测试专属代码。

内容的提问来源于stack exchange,提问作者Nie Selam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:35:53