Невозможно протестировать код, требующий разрешения CHANGE_NETWORK_STATE / WRITE_SETTINGS на Зефир - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь обновить targetSDK моего приложения до уровня выше 23, и у меня возникла небольшая проблема. У меня есть активность, которая связывает трафик с Wi-Fi (для измерения скорости сети к маршрутизатору, даже если маршрутизатор не подключен к Интернету). Для этого моему приложению необходимо разрешение CHANGE_NETWORK_STATE. Это разрешение обычно предоставляется непосредственно, если оно заявлено в манифесте. В Android 6.0 (точнее, это было исправлено в 6.0.1 IIRC) CHANGE_NETWORK_STATE не работает и не будет предоставлено, поэтому вместо этого вам нужно разрешение WRITE_SETTINGS. Я реализовал способ для пользователей Android 6.0 предоставить это разрешение, но когда я хочу проверить свою активность с помощью эспрессо, я не могу этого сделать. Разрешения предоставляются тестам, добавляя что-то вроде

@Rule public GrantPermissionRule runtimePermissionRule = GrantPermissionRule.grant(Manifest.permission.CHANGE_NETWORK_STATE);

в TestCase. Это работало в других местах в приложении, но за это я получаю junit.framework.AssertionFailedError: Failed to grant permissions, see logcat for details в моих результатах теста. В logcat я нахожу E/GrantPermissionCallable: Permission: android.permission.WRITE_SETTINGS cannot be granted! или то же самое с CHANGE_NETWORK_STATE, я пытался предоставить оба, и они оба не работают. Есть ли другой способ предоставить мне разрешение на тестирование? Или я не могу теперь проверить эту активность на устройствах 6.0?

1 Ответ

0 голосов
/ 24 июля 2019

Поскольку WRITE_SETTINGS является конфиденциальным разрешением, вы не сможете предоставить его с помощью GrantPermissionRule в API 23. Скорее всего, вам придется использовать UIAutomator в своих тестах, чтобы выбрать соответствующий ответ на экране управления разрешениями .

...