如何让Android单元测试在真机/模拟器而非Robolectric临时目录生成文件
解决方案
问题根源
你当前运行的是本地JVM单元测试,Robolectric的作用是在开发电脑上模拟Android运行环境,所有文件操作都在电脑本地的临时目录执行,自然无法写入真机/模拟器的存储空间。
具体操作步骤
第一步:移动测试类到插桩测试目录
Android项目默认有两类测试目录:src/test/:存储本地JVM单元测试,运行在电脑上,只能使用模拟环境src/androidTest/:存储instrumented插桩测试,运行在真机/模拟器上,可以访问设备真实环境
你需要把当前的测试类从src/test/移动到src/androidTest/对应的包路径下。
第二步:调整配置与注解
首先确保Module级build.gradle中已经引入插桩测试依赖:androidTestImplementation 'androidx.test:core:1.5.0' androidTestImplementation 'androidx.test.ext:junit:1.1.5'其次给测试类添加插桩测试运行器注解:
@RunWith(AndroidJUnit4.class) public class FileTest { // 你的测试方法写在这里 }第三步:调整上下文获取逻辑
插桩测试中直接用你之前写的代码即可获取真实App上下文:Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();此时调用
context.getFilesDir()拿到的就是App在设备上的私有目录,生成的文件会存储在设备的/data/data/[你的应用包名]/files/myfile路径下。
注意事项
- 运行测试时要选择androidTest对应的运行配置,设备选择已连接的真机或已启动的模拟器,不要选择本地JVM的运行配置
- 如果需要把文件存储到公共存储目录,需要按照Android对应系统版本的要求申请存储权限,测试前可以手动给App开启存储权限避免写入失败
内容的提问来源于stack exchange,提问作者fabiobh
相关产品推荐
相关产品推荐

