0

我想对我的lib执行JUnit测试,并希望在测试开始前要求用户授予所有必需的权限(因为我需要在自动化过程中从设备存储中读取一些文件测试例如)。如何在Android Marshmallow上请求JUnit测试权限

我知道如何通过将任务添加到gradle并从cmd运行它,它运行良好。但是当我使用IDE运行我的测试时,我需要询问用户(或自动执行)。

我试着向测试应用程序的MainActivity.onCreate()添加权限请求,但没有运气,因为MainActivity不是为所有测试启动的。

有没有人有任何想法?

此外,请不要谈论添加gradle授权任务到执行配置。它工作但无法使用,需要更统一的东西。

+0

试试这个可能是工作原理stackoverflow.com/a/41221852/5488468 –

+0

对不起,这不是我的问题。我的问题是关于JUnit测试 – pbelov

+0

你好pbelov, 我面临同样的问题。你解决了这个问题吗?如果是的话如何? – TKumar

回答

2

我找到了解决我的问题的方法。这是很容易:

需要在应用程序级的创建一个新的任务build.gradle文件是这样的:

android.applicationVariants.all { variant -> 
    def applicationId = variant.applicationId 
    def adb = android.getAdbExe().toString() 
    def variantName = variant.name.capitalize() 
    def grantPermissionTask = tasks.create("create${variantName}Permissions") << { 
     println "Granting permissions" 
     "${adb} shell pm grant ${applicationId} android.permission.ACCESS_FINE_LOCATION".execute() 
     "${adb} shell pm grant ${applicationId} android.permission.WRITE_EXTERNAL_STORAGE".execute() 
     "${adb} shell pm grant ${applicationId} android.permission.READ_EXTERNAL_STORAGE".execute() 
    } 
} 

然后添加以下的依赖:

preBuild.dependsOn "createDebugPermissions" 

后,所有必需的权限将当你运行任何测试时都会被授予