安卓棉花糖:使用Espresso测试权限?

75

Android Marshmallow引入了新的权限管理机制,需要在运行时检查特定的权限,这意味着需要根据用户是否拒绝或允许访问提供不同的流程。

由于我们使用Espresso在应用程序上运行自动化UI测试,因此如何模拟或更新权限状态以测试不同情景呢?


可能是如何管理运行时权限Android Marshmallow Espresso测试的重复问题。 - Daniel Gomez Rico
试试这个,它可能会对你有所帮助:-https://dev59.com/J1wX5IYBdhLWcg3w-Thv#41221852 - Bipin Bharti
13个回答

0

如果需要允许权限,我认为最简单的方法是在需要该权限的测试中直接使用BaristaPermissionGranter.allowPermissionsIfNeeded(Manifest.permission.GET_ACCOUNTS)


0

我已经实现了一个解决方案,利用包装类、重写和构建变量配置。这个解决方案很长,可以在这里找到:https://github.com/ahasbini/AndroidTestMockPermissionUtils

它还没有打包成sdk,但主要思路是覆盖ContextWrapper.checkSelfPermissionActivityCompat.requestPermissions的功能,以便操纵并返回模拟结果,欺骗应用程序进入不同的测试场景,例如:权限被拒绝,因此应用程序请求并最终获得授权。即使应用程序一直拥有该权限,也会出现这种情况,但这个想法是通过重写实现来欺骗模拟结果。

此外,该实现还有一个名为PermissionRuleTestRule类,可用于测试类中,以便轻松模拟所有条件,无缝测试权限。还可以进行断言,例如确保应用程序已调用requestPermissions()


0

我知道已经有一个答案被接受了,但是,与其一遍又一遍地建议使用if语句,另一个更优雅的方法是在你想要针对特定操作系统版本进行实际测试时,可以采取以下方法:

@Test
fun yourTestFunction() {
    Assume.assumeTrue(Build.VERSION.SDK_INT >= 23)
    // the remaining assertions...
}

如果使用一个求值为false的表达式来调用assumeTrue函数,测试将停止并被忽略,我假设这正是你在设备预SDK 23上执行测试时想要的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接