Android Robolectric Unit Test für Marshmallow PermissionHelper

Ich möchte Robolectric für Unit-Tests mit einer Android-Marshmallow-App lernen. Ich habe ein @ geschriebPermissionHelper mit einigen Methoden, um den Umgang mit Berechtigungen zu vereinfachen. Um mit Unit-Tests für diese Klasse zu beginnen, versuche ich, die einfachste Methode zu testen:

public static boolean hasPermissions(Activity activity, String[] permissions) {
    for (String permission : permissions) {
        int status = ActivityCompat.checkSelfPermission(activity, permission);
        if (status == PackageManager.PERMISSION_DENIED) {
            return false;
        }
    }
    return true;
}

Hier ist der Robolectric-Test, den ich bisher geschrieben habe:

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
public class PermissionHelperTest {

    private PermissionHelper permissionHelper;
    private ShadowApplication application;

    @Before
    public void setup() {
        PictureActivity activity = Robolectric.buildActivity(PictureActivity.class).get();
        permissionHelper = new PermissionHelper(activity, activity, 1);
        application = new ShadowApplication();
    }

    @Test
    public void testHasPermission() throws Exception {
        String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE};
        boolean hasPermissions = permissionHelper.hasPermissions(permissions);
        Assert.assertEquals(false, hasPermissions);

        application.grantPermissions(permissions);
        hasPermissions = permissionHelper.hasPermissions(permissions);
        Assert.assertEquals(true, hasPermissions);
    }
}

The first Assert works (keine Berechtigung erteilt). Nachdem alle Berechtigungen über die ShadowApplication erteilt wurden, werden sie im nächsten Assert jedoch weiterhin verweigert.

Ich glaube, dass derPictureActivity hergestellt mitRobolectric.buildActivity() verwendet die ShadowApplication nicht für die Berechtigungsprüfungen. AberPictureActivity.getApplication() gibt mir keinShadowApplication anrufengrantPermissions auf. Wie kann ich das testen?

Ich bin neu bei Robolectric und teste Geräte unter Android. Wenn es also ein anderes Framework gibt, das dies einfacher / möglich macht: Ich bin offen für Vorschläge.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage