Android Studio:在使用图形测试运行器安装测试APK和运行测试之间授予权限

Chr*_*yle 7 android unit-testing android-espresso

我正在尝试自动禁用动画,如本文所述,但这似乎只适用于命令行调用connectedAndroidTest.我想在Studio中使用图形测试运行器,列表框显示通过/失败的测试.对于该adb shell pm grant ... android.permission.SET_ANIMATION_SCALE运行器,权限grant()永远不会运行,似乎因为gradle任务installDebugAndroidTest永远不会运行,而是运行器正在运行Gradle assembleDebugAndroidTest(或者我在运行配置中指定的任何备用gradle任务),然后com.mypackage.test由某些人安装在运行测试之前的其他(非Gradle?)方法.因此,该安装会重置任何先前的权限授予.

如何SET_ANIMATION_SCALE在图形测试运行器的测试包安装和测试运行之间进行授权?

alb*_*elu 1

您可以使用反射来完成此操作,将权限添加到清单中,创建 Espresso TestRule 和任务(此处详细说明)。

将权限添加到调试/模拟变体的清单中:

<uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
Run Code Online (Sandbox Code Playgroud)

根据您的任务创建您自己的任务installDebug并使其connectedDebugAndroidTest依赖。您还需要授予SET_ANIMATION_SCALE 测试权限。

创建一个使用内部反射来检索和恢复动画比例的测试规则(代码):

public class AnimationAwareWonderTestRule extends AnimationAwareAwesomeTestRule {

    private float[] mAnimationScales;

    @Override
    protected void before() throws Throwable {
        mAnimationScales = AnimationAwareWonder.tryToRetrieveAndDisableAnimationsAndTransitions();
    }

    @Override
    protected void after() throws Throwable {
        AnimationAwareWonder.tryToRestoreAndEnableAnimationsAndTransitions(mAnimationScales);
    }
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但目前似乎不可能在 MarshMallow 中使用此权限。