如何在Android中模拟测试权限?

时间:2015-10-02 09:44:57

标签: android testing mockito robolectric

使用Android 6.0和新的权限模型,我在执行某项任务之前检查是否存在权限。

我想将这些权限分配给可用且不可用于测试目的。我有一个静态类来检查各种权限取决于字符串。

boolean result = ContextCompat.checkSelfPermission(context, name) == PackageManager.PERMISSION_GRANTED;

可以使用Mockito或Roboelectric实现吗?

1 个答案:

答案 0 :(得分:4)

如果您将权限检查器移动到协作者类,则可以模拟协作者。我不熟悉Android返回类型,但解决方案看起来像这样:

class PermissionsChecker {
    public String checkSelfPermission(context, name) {
       return ContextCompat.checkSelfPermission(context, name);
    }
}
class YourApp {
    private PermissionsChecker permissionsChecker; //need to inject this via setter or constructor
    public doSomething() {
       boolean result = permissionsChecker.checkSelfPermission(context, name).equals(PackageManager.PERMISSION_GRANTED);
    }
}
class YourAppTest {
   PermissionsChecker permissionsChecker = mock(PermissionsChecker.class);
   @InjectMocks YourApp app = new YourApp();
   @Test
   public void hasPermissions() {
      when(permissionsChecker.checkSelfPermission(...)).thenReturn("NOT GRANTED");
      app.something();
      //verify you get some error
    }
}