Android Marshmallow uygulamasında birim testleri için Robolectric'i kullanmayı öğrenmek istiyorum. İzin vermek biraz daha kolay hale getirmek için bazı yöntemleri ile bir PermissionHelper
yazdım. (Android Marshmallow PermissionHelper için Robolectric birim testi
@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);
}
}
ilk belirt çalışır:
İştepublic 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;
}
şimdiye kadar yazdım Robolectric testidir: bu sınıf için birim testleri ile başlamak için, ben en basit yöntemi test etmek çalışıyorum izin verilmedi). Ancak ShadowApplication üzerinden tüm izinleri verdikten sonra, bir sonraki Assert'te hala reddediliyorlar.
Robolectric.buildActivity()
ile oluşturulan PictureActivity
, izin denetimleri için ShadowApplication kullanmadığını düşünüyorum. Ancak PictureActivity.getApplication()
, grantPermissions
numaralı telefonu aramak için bana ShadowApplication
vermez. Bunu nasıl test edebilirim?
Android'de Robolectric ve unit testlerinde yeniyim ... bu yüzden daha kolay/mümkün kılan başka bir çerçeve varsa: Önerilere açığım.
Evet, bu çalıştı! Teşekkür ederim. Değişiklikten sonra AndroidHttpClient'in eksik olduğu başka bir hata aldım, ancak burada tartışılan kolay bir çözüm: https://github.com/robolectric/robolectric/issues/1862 – muetzenflo