Voglio imparare Robolectric per utilizzarlo per i test unitari su un'app Android Marshmallow. Ho scritto uno PermissionHelper
con alcuni metodi per rendere la gestione dei permessi un po 'più semplice. Per iniziare con il test di unità per questa classe, sto cercando di testare il metodo più semplice:Test dell'unità Robolectric Android per 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;
}
Ecco il test Robolectric che ho scritto finora:
@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);
}
}
Il primo Assert Works (nessun permesso concesso). Ma dopo aver concesso tutte le autorizzazioni tramite ShadowApplication, vengono comunque negati nel prossimo Assert.
Penso che lo PictureActivity
creato con Robolectric.buildActivity()
non stia utilizzando ShadowApplication per i controlli di autorizzazione. Ma PictureActivity.getApplication()
non mi da un ShadowApplication
per chiamare grantPermissions
su. Come posso testarlo?
Sono nuovo di Robolectric e collaudo di unità su Android ... quindi se c'è qualche altra struttura che rende questo più facile/possibile: sono aperto a suggerimenti.
Sì, che ha funzionato! Grazie. Dopo la modifica ho ricevuto un altro errore che AndroidHttpClient manca, ma questa è una soluzione semplice discussa qui: https://github.com/robolectric/robolectric/issues/1862 – muetzenflo