2

我正在为我的应用程序测试一个文件导入操作的正确性。为了自动测试,我的计划是将我的测试资产目录中的文件复制到被测设备的下载文件夹中,并使用Espresso测试用例执行导入操作。测试用例的Android权限

有人有这方面的经验吗?我遇到了这样一个问题,即我的测试用例没有权限向设备写入任何内容。

到目前为止,我已经创建了一个专门的manifest.xml文件包含所需的权限我的测试应用程序:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

而且,我在执行此操作前我的测试开始给予必要的许可权测试用例:

012:

adb shell pm grant com.my_app_pacakge.test android.permission.WRITE_EXTERNAL_STORAGE 

不幸的是,当我在下载目录中创建该文件的以下异常,此刻我尽量写的内容备份文件抛出

Caused by: java.io.FileNotFoundException: /storage/emulated/0/Download/small_backup: open failed: EACCES (Permission denied) 

相关的代码如下:

public void putBackupFile(String name ){ 
     File backupFile = new File(Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).getPath(), name); 

     try { 
      InputStream is = InstrumentationRegistry.getInstrumentation().getContext().getAssets().open(name); 
      FileOutputStream fileOutputStream = new FileOutputStream(backupFile); 

      byte[] buffer = new byte[1024]; 

      int len; 

      while ((len = is.read(buffer)) != -1) { 
       fileOutputStream.write(buffer, 0, len); 
      } 

      fileOutputStream.close(); 
      is.close(); 
     } catch (IOException e1) { 
      throw new RuntimeException(e1); 
     } 
    } 

唯一的例外是在触发:FileOutputStream fileOutputStream = new FileOutputStream(backupFile);

+0

发布您创建文件的代码。因为它可能是您尝试将路径应用于文件的问题。 – JoxTraex

+0

更改了帖子以包含相关代码 – Peter

+0

您是否尝试在应用程序中包含权限?我想我曾经有一个类似的问题,其中测试应用程序只能使用应用程序的权限 –

回答

0

回答原来的问题:如果从亚洲开发银行授予android.permission.WRITE_EXTERNAL_STORAGE,你必须给予android.permission.READ_EXTERNAL_STORAGE还有:

adb shell pm grant com.my_app_pacakge.test android.permission.READ_EXTERNAL_STORAGE 

这似乎是,如果一个人要求写在应用程序中的权限,自动询问/授予读取权限。如果从adb中进行,则必须另外授予READ权限。

0

我意识到,在我的问题的appraoch状态不是最好的办法:我已经解决了这个另一种方法:使用adb命令行传输所需文件:

adb push small_backup/mnt/sdcard/Download

该声明已集成到我的测试设置中(在运行测试之前执行)。在测试案例中,我认为所需的文件是可用的。