2

При запуске теста Espresso с помощью студии Android я получаю исключение при записи во внутреннюю память: java.io.FileNotFoundException:/storage/emulated/0/MyCache: open failed: EACCES (Permission denied)AndroidManifest.xml для тестирования эспрессо

Я понимаю, что эта проблема вызвана отсутствием разрешений.

Мой вопрос: должен ли я создать дополнительный файл AndroidManifest для теста Espresso, или я должен использовать существующий файл AndroidManifest из самого приложения? Я пробовал 2-й вариант, но мне кажется, что MainActivityTest не видна на AndroidManifest.xml моего приложения

Пожалуйста, обратитесь к прикрепленному экрану печати:

project print screen

+0

В каком контексте вы используете во время записи во внутреннюю память? – denys

+0

Я запускаю MainActivityTest, который является моим приложением для тестирования эспрессо –

+1

Доступ к приложению в тестовом (AUT) контексте можно получить с помощью 'InstrumentationRegistry.getTargetContext()'. Поэтому, если вы объявили требуемое разрешение в своем 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 является marshmallow (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"); 
} 

это предоставить вам соответствующее разрешение для внешнего доступа к хранилищам