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

Android非插桩单元测试如何访问res/raw下的config.json文件?

Android非插桩单元测试访问res/raw中config.json的问题

核心结论

非插桩单元测试默认无法直接访问res/raw目录下的文件。因为非插桩测试运行在本地JVM环境,不会打包Android资源目录,res/raw下的文件不会被加入测试的classpath,所以你尝试的几种classLoader.getResourceAsStream()写法都无法找到文件。

可行解决方案

1. 复制文件到测试资源目录

将res/raw/config.json复制到src/test/resources目录下,然后直接使用以下代码读取:

javaClass.classLoader?.getResourceAsStream("config.json")

src/test/resources是JVM测试的默认资源目录,其中的文件会被自动加入测试classpath,直接用文件名即可访问。

2. 自动同步res/raw文件到测试资源(避免重复维护)

如果不想手动复制两份文件,可以在Module级别的build.gradle(或build.gradle.kts)中添加构建任务,自动将res/raw里的config.json同步到测试资源目录:

Groovy写法:

tasks.withType(Test) {
    doFirst {
        copy {
            from "$projectDir/src/main/res/raw/config.json"
            into "$buildDir/resources/test"
        }
    }
}

Kotlin DSL写法:

tasks.withType<Test> {
    doFirst {
        copy {
            from("$projectDir/src/main/res/raw/config.json")
            into("$buildDir/resources/test")
        }
    }
}

每次运行测试前,该任务会自动复制文件,确保测试用的文件和主工程保持一致。

3. 临时方案:内联文件内容

如你所说,将config.json的内容直接以字符串形式写在测试代码中,适合配置内容较短的场景:

val configContent = """
{
  "key": "value",
  "setting": true
}
""".trimIndent()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:04:57