2015-10-02 8 views
6

Mit Android 6.0 und neues Berechtigungsmodell überprüfe ich, ob die Erlaubnis existiert, bevor bestimmte Aufgaben ausgeführt werden.Wie werden Berechtigungen für das Testen in Android simuliert?

Ich möchte diese Berechtigungen verfügbar machen und nicht für Testzwecke verfügbar. Ich habe eine statische Klasse, um verschiedene Berechtigungen abhängig von der Zeichenfolge zu überprüfen.

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

Kann es mit Mockito oder Roboelectric erreicht werden?

+2

Robolectric ist erst jetzt mit API 21 kompatibel. Sie arbeiten gerade mit API 23 –

Antwort

3

Wenn Sie Ihre Berechtigungsprüfung in eine Collaborator-Klasse verschieben, können Sie sich über den Collaborator lustig machen. Ich kenne die Android-Rückgabetypen nicht, aber die Lösung würde folgendermaßen aussehen:

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 
    } 
} 
Verwandte Themen