2015-10-02 38 views
6

使用Android 6.0和新的权限模型,我正在执行特定任务前检查权限是否存在。如何在Android中测试权限测试?

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

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

可以使用Mockito或Roboelectric来实现吗?

+2

Robolectric与API兼容21只了。他们现在正在使用API​​ 23 –

回答

3

如果您将权限检查器移动到协作者类,则可以模拟协作者。我不熟悉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 
    } 
}