簡體   English   中英

運行 espresso 測試時找不到 UID 錯誤消息的持久權限授予

[英]No persistable permission grants found for UID error message when running an espresso test

我有一個應用程序請求訪問文件夾。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra("android.provider.extra.SHOW_ADVANCED", true);

mStartChooseFolderForResult.launch(intent);

然后在 OnActivityResult 中:

public void onActivityResult(ActivityResult result)
{
    if (result.getResultCode() == Activity.RESULT_OK)
    {
        Intent intent = result.getData();
        Uri uri = intent.getData();
        ContentResolver cr = getActivity().getContentResolver();
        int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                  | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
        cr.takePersistableUriPermission(uri, flags);
        ...
    }
}

當我手動運行該應用程序時,會授予持久權限,即使在重新啟動后它也能正常工作。

但是,當我在重啟后在 expresso 測試中運行該應用程序時,出現以下錯誤:

No persistable permission grants found for UID...

如果我手動運行應用程序和 select 濃縮咖啡測試的文件夾,然后運行濃縮咖啡測試,那么它工作正常

這是我的測試代碼(當然,我之前調用了 Intents.init() ,之后調用了 Intenst.release() ):

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setData(Uri.parse(DEFAULT_FOLDER_STRING + "%2F" + testFolder));
Instrumentation.ActivityResult result = new 
    Instrumentation.ActivityResult(Activity.RESULT_OK, intent);
intending(hasAction(Intent.ACTION_OPEN_DOCUMENT_TREE)).respondWith(result);
    
onView(withText("select")).perform(click());

我該如何解決這個錯誤?

我該如何解決這個錯誤?

我的猜測是您需要取消測試。

如果您對返回的Intent所做的只是查看它,那么您的模擬返回Intent就可以了。 但是,您實際上是在嘗試使用Intent中的詳細信息進行系統調用( takePersistableUriPermission() )。 而且,錯誤非常簡單:操作系統沒有跡象表明Uri.parse(DEFAULT_FOLDER_STRING + "%2F" + testFolder)的持久許可授予。 因此,當您調用takePersistableUriPermission()時,操作系統會非常混亂。

如果您希望保留此測試,則需要重寫您的活動/片段以不調用takePersistableUriPermission()本身。 相反,該邏輯將需要移動到其他地方(例如,視圖模型),您的測試在其中使用測試替身(例如,模擬或偽造),以便您的測試實際上不會調用takePersistableUriPermission()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM