2015-10-02 3 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 
    } 
}