用于Espresso测试的AndroidManifest.xml

时间:2017-01-18 12:06:27

标签: android android-studio automated-tests android-manifest android-espresso

在使用Android studio运行Espresso测试时,我在写入内部存储时收到异常: java.io.FileNotFoundException:/ storage / emulated / 0 / MyCache:open failed:EACCES(Permission denied)

我明白这个问题是由于缺乏权限造成的。

我的问题是,我是否必须为Espresso测试创建额外的AndroidManifest文件,还是应该使用应用程序本身的现有AndroidManifest文件? 我已尝试过第二个选项,但似乎我的应用AndroidManifest.xml无法看到MainActivityTest

请参阅随附的打印屏幕:

project print screen

3 个答案:

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

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