【发布时间】:2016-05-04 01:07:23
【问题描述】:
我想学习 Robolectric,以便在 Android 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;
}
这是我目前编写的 Robolectric 测试:
@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);
}
}
第一个 Assert 有效(未授予权限)。但是在通过 ShadowApplication 授予所有权限后,它们仍然在下一个 Assert 中被拒绝。
我认为使用Robolectric.buildActivity() 创建的PictureActivity 没有使用ShadowApplication 进行权限检查。但是PictureActivity.getApplication() 没有给我ShadowApplication 来调用grantPermissions。我该如何测试?
我是 Robolectric 和 Android 单元测试的新手......所以如果有任何其他框架可以让这更容易/可能:我愿意接受建议。
【问题讨论】:
标签: android unit-testing robolectric android-permissions android-6.0-marshmallow