Ich möchte Robolectric lernen, um es für Unit Tests auf einer Android Marshmallow App zu verwenden. Ich schrieb eine PermissionHelper
mit einigen Methoden, um Erlaubnisbehandlung ein wenig einfacher zu machen. Um mit Unit-Tests für diese Klasse zu beginnen, Ich versuche, die einfachste Methode zu testen:Android Robolectric Einheit Test für Marshmallow PermissionHelper
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, die ich bisher geschrieben:
@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);
}
}
Die erste Assert arbeitet (keine Erlaubnis gewährt). Aber nachdem alle Berechtigungen über die ShadowApplication erteilt wurden, werden sie im nächsten Assert noch immer abgelehnt.
Ich denke, dass die PictureActivity
erstellt mit Robolectric.buildActivity()
nicht die ShadowApplication für die Berechtigungsprüfungen verwendet. Aber PictureActivity.getApplication()
gibt mir keine ShadowApplication
um grantPermissions
anzurufen. Wie kann ich das testen?
Ich bin neu in Robolectric und Komponententests auf Android ... also wenn es ein anderes Framework gibt, das dies einfacher/möglich macht: Ich bin offen für Vorschläge.
Ja, das hat geklappt! Vielen Dank. Nach der Änderung habe ich einen weiteren Fehler, dass AndroidHttpClient fehlt, aber das ist ein einfacher Fix hier diskutiert: https://github.com/robolectric/robolectric/issues/1862 – muetzenflo