2

使用Android Studio運行Espresso測試時,在寫入內部存儲時收到異常: java.io.FileNotFoundException:/ storage/emulated/0/MyCache:open failed:EACCES(Permission denied )用於Espresso測試的AndroidManifest.xml

我明白這個問題是由於缺乏權限造成的。

我的問題是,我是否必須爲Espresso測試創建額外的AndroidManifest文件,還是應該從應用程序本身使用現有的AndroidManifest文件? 我已經嘗試了第二個選項,但似乎MainActivityTest是不是我的應用程序的AndroidManifest.xml

請參考附件打印屏幕上可見:

project print screen

+0

寫入內部存儲器時使用哪種上下文? – denys

+0

我在MainActivityTest上運行這是我的Espresso測試應用程序 –

+1

通過InstrumentationRegistry.getTargetContext()可以訪問應用程序測試(AUT)上下文。所以如果你已經在AUT中聲明瞭需要的權限,那麼你可以使用它的上下文。其他可能性是將您的緩存文件保存在AUT內或測試應用程序包存儲 - data/data/com.your.package/files/cache_file中。那麼你根本不需要許可。 – denys

回答

1

有可能下試訪問應用程序(AUT)範圍內的相應權限通過InstrumentationRegistry.getTargetContext()。所以如果你已經在AUT中聲明瞭需要的權限,那麼你可以使用它的上下文。

其他可能性是將您的緩存文件保存在AUT或測試應用程序包存儲器中 - data/data/com.your.package/files/cache_file。那麼你根本不需要許可。

2

無法理解你的問題。如果你的目標sdk是棉花糖(sdk 24),所以你必須定義運行時權限。檢查了這一點https://developer.android.com/training/permissions/requesting.html

另一個解決方案是降級目標SDK(嘗試做到這一點在你的build.gradle),或創建一個新的項目,目標= 23

分享一些代碼,以便我們能理解問題原因

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

這會令你的外部存儲訪問