在使用Android studio运行Espresso测试时,我在写入内部存储时收到异常: java.io.FileNotFoundException:/ storage / emulated / 0 / MyCache:open failed:EACCES(Permission denied)
我明白这个问题是由于缺乏权限造成的。
我的问题是,我是否必须为Espresso测试创建额外的AndroidManifest文件,还是应该使用应用程序本身的现有AndroidManifest文件? 我已尝试过第二个选项,但似乎我的应用AndroidManifest.xml无法看到MainActivityTest
请参阅随附的打印屏幕:
答案 0 :(得分:2)
无法理解你的问题。如果您的目标sdk是marshmallow(sdk 24),那么您必须定义运行时权限。看看https://developer.android.com/training/permissions/requesting.html
另一种解决方案是降级目标sdk(尝试在build.gradle中执行此操作)或创建目标= 23的新项目
分享一些代码,以便我们了解问题的原因
答案 1 :(得分:1)
可以通过InstrumentationRegistry.getTargetContext()
访问受测试的应用程序(AUT)上下文。因此,如果您已经在AUT中声明了所需的权限,那么您可以使用它的上下文。
其他可能性是将您的缓存文件保存在AUT内部或测试应用程序包存储 - data/data/com.your.package/files/cache_file
。然后你根本不需要许可。
答案 2 :(得分:0)
您应该已经在AndroidManifest.xml
中定义了该权限。如果你在M +上运行,你可能正在寻找类似的东西:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getInstrumentation().getUiAutomation().executeShellCommand(
"pm grant " + getTargetContext().getPackageName()
+ " android.permission.WRITE_EXTERNAL_STORAGE");
}
这将授予您适当的外部存储访问权限