Espresso测试的AndroidManifest.xml

3
在使用Android Studio执行Espresso测试时,我在写入内部存储时收到一个异常: java.io.FileNotFoundException: /storage/emulated/0/MyCache: open failed: EACCES (Permission denied)
我理解这个问题是由于缺乏权限引起的。
我的问题是,我是否需要为Espresso测试创建额外的AndroidManifest文件,还是应该使用应用程序本身的现有AndroidManifest文件? 我尝试了第二个选项,但似乎我的应用程序的AndroidManifest.xml中看不到MainActivityTest。
请参考附带的截图:

project print screen


你在写入内部存储时使用了哪个上下文? - denys
我正在运行MainActivityTest,这是我的Espresso测试应用程序。 - Alex Kolo
1
可以通过InstrumentationRegistry.getTargetContext()访问测试应用程序(AUT)上下文。因此,如果您已在AUT中声明所需的权限,则可以使用其上下文。另一种可能性是将缓存文件保存在AUT或测试应用程序包存储中-data/data/com.your.package/files/cache_file。然后您根本不需要权限。 - denys
@denys 将数据存储在应用目录下对我很有效,谢谢! - Alex Kolo
我把我的评论发布为答案,你可以批准它。我喜欢赏金 :) - denys
3个回答

1
无法理解您的问题。如果目标SDK为marshmallow(sdk 24),则必须定义运行时权限。请参见https://developer.android.com/training/permissions/requesting.html
另一种解决方案是降级目标SDK(尝试在build.gradle中进行此操作)或创建一个新项目,目标版本为23。
分享一些代码以便我们能够了解问题的原因。

1
可以通过InstrumentationRegistry.getTargetContext()访问测试应用程序(AUT)上下文。因此,如果您在AUT中声明了所需的权限,则可以使用其上下文。
另一种可能性是将缓存文件保存在AUT或测试应用程序包存储中-data/data/com.your.package/files/cache_file。然后您根本不需要权限。

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");
}

这将授予您外部存储访问的适当权限


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接