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
相关产品推荐
相关产品推荐

