Android Marshmallowアプリで単体テスト用にRobolectricを使用したいと思っています。私はPermissionHelper
を書いて、許可の扱いを少し簡単にする方法をいくつか挙げました。 (Android Robolectricユニットテストfor Marshmallow PermissionHelper
@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);
}
}
最初のアサートが動作します。
ここ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;
}
は、私がこれまでに書いたRobolectricテストです:このクラスのユニットテストを開始するには、私が最も簡単な方法をテストしようとしています許可はありません)。しかし、すべてのパーミッションをShadowApplicationで許可した後も、次のAssertでは拒否されます。
Robolectric.buildActivity()
で作成されたPictureActivity
は、アクセス許可の確認にShadowApplicationを使用していないと思います。しかしPictureActivity.getApplication()
は私にShadowApplication
を与えず、grantPermissions
を呼び出します。これをどうすればテストできますか?
私はAndroidでRobolectricとユニットテストの初心者です...これを簡単にする/可能にする他のフレームワークがあれば:私は提案を受け付けています。
はい、それは働きました!ありがとうございました。変更後、AndroidHttpClientが見つからないという別のエラーが発生しましたが、これは簡単な修正です:https://github.com/robolectric/robolectric/issues/1862 – muetzenflo