android - 如何授予android仪器测试权限?
问题描述
我有一个读取 SMS 的应用程序。该应用程序在调试时工作正常,但在使用 android 仪器测试时会引发以下错误
java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider
这是我的测试用例
@RunWith(AndroidJUnit4.class)
public class SmsFetcherTest {
@Test
public void fetchTenSms() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getContext();
// Fails anyway.
// assertTrue(ContextCompat.checkSelfPermission(appContext,
// "android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED);
List<Sms> tenSms = new SmsFetcher(appContext)
.limit(10)
.get();
assertEquals(10, tenSms.size());
}
}
我是仪器测试的新手。这是正确的方法吗?
还是我错过了什么?
解决方案
使用GrantPermissionRule
. 就是这样:
将以下依赖项添加到app/build.gradle
:
dependencies {
...
androidTestImplementation 'androidx.test:rules:1.2.0'
}
现在将以下内容添加到您的InstrumentedTest
课程中:
import androidx.test.rule.GrantPermissionRule;
public class InstrumentedTest {
@Rule
public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule.grant(Manifest.permission.READ_SMS);
...
}
推荐阅读
- android - Agora 网络直播到手机
- spring-boot - 有没有办法用spring boot在胡子模板中执行算术运算?
- php - Laravel Framework 7.18.0 中的 500 -server 错误(在浏览器上看不到任何错误信息。)
- elm - 防止我的 Elm 应用程序在第 3 方更改 DOM 时崩溃
- ios - 为什么从数组绑定对象时子视图会显示旧数据?
- python - XGBClassifier 中的 'objective' = 'binary:logitraw' 是什么?
- javascript - Html 表格到 Excel 导出脚本显示错误“缺少关闭引号”
- android - 无法访问类“android.widget.fragment”。检查您的模块类路径是否存在缺失或冲突的依赖项
- mysql - 使用 CTE 在时间戳查询上创建索引
- android - 如果我在 onResource 准备好新的 Glide 下载,我应该下载两次还是只下载一次?