2015-10-02 13 views
6

Con Android 6.0 e il nuovo modello di autorizzazione, sto verificando se il permesso esiste prima di eseguire determinate attività.Come simulare le autorizzazioni per i test in Android?

Desidero assegnare queste autorizzazioni a disponibili e non disponibili a scopo di test. Ho una classe statica per controllare vari permessi a seconda della stringa.

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

Può essere raggiunto utilizzando Mockito o Roboelectric?

+2

Robolectric è compatibile solo con l'API 21. Stanno lavorando con API 23 in questo momento –

risposta

3

Se si sposta il controllo delle autorizzazioni in una classe collaboratore, è possibile prendere in giro il collaboratore. Non ho familiarità con i tipi di ritorno di Android, ma la soluzione sarebbe simile a questa:

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 
    } 
} 
Problemi correlati