Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android instrumented test使用GrantPermissionRule在每个测试方法的开头手动授予权限_Android_Android Permissions_Instrumented Test - Fatal编程技术网

Android instrumented test使用GrantPermissionRule在每个测试方法的开头手动授予权限

Android instrumented test使用GrantPermissionRule在每个测试方法的开头手动授予权限,android,android-permissions,instrumented-test,Android,Android Permissions,Instrumented Test,我正在使用Kotlin开发一个Android应用程序。我正在为我的应用程序编写仪器化测试。我正在使用GrantPermissionRule授予测试中的权限,如下所示 @get:Rule var permissionRule: GrantPermissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION) 但是,这不符合我的要求。每次执行后,我将清除所有授予的权限。另外,我喜欢测

我正在使用Kotlin开发一个Android应用程序。我正在为我的应用程序编写仪器化测试。我正在使用GrantPermissionRule授予测试中的权限,如下所示

@get:Rule 
var permissionRule: GrantPermissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION)
但是,这不符合我的要求。每次执行后,我将清除所有授予的权限。另外,我喜欢测试不授予权限的场景。我在测试中明确地启动活动,如下所示

@Test
fun exampleTest() {
    this.eventDetailsActivityRule.launchActivity(intent)
}

我喜欢在启动活动之后或之前使用GrantPermissionRule显式授予权限。如何才能做到这一点?

另一个问题是,
GrantPermissionRule
表示授予的权限在检测测试期间持续(“授予权限后,它将应用于当前检测中运行的所有测试。授予权限后无法撤消权限。尝试这样做将使检测过程崩溃。”)。这可能会迫使您使用Android Test Orchestrator使每个测试在其自己的工具中运行,从而真正降低测试的速度。但是,假设您可以接受该限制,则AndroidX
GrantPermissionRule
似乎无法直接支持您所寻求的内容。您将需要
grantPermissions()
方法必须是
public
,因此您可以控制授予权限的时间。不幸的是,至少在
androidx中是这样。test:rules:1.2.0
,在androidx中是
private
。test:rules:1.2.0,它是private“意味着没有解决这个问题的机会。我必须使用Android测试协调器。谢谢@CommonsWareBut但如何使用Android测试Orchestrator分离权限?你能给我一些链接吗?对不起,我想我可能把你弄糊涂了
GrantPermissionRule
编写时,似乎不允许您部分通过测试函数授予权限。但是,
GrantPermissionRule
来自一个库,您可以尝试将其分叉以创建权限授予代码,您可以部分通过测试函数使用该代码。假设您这样做了,您还需要使用Android Test Orchestrator,如果您有2个以上与这些权限相关的测试,那么测试1中的权限授予不会影响测试2。