为UserManager创建自定义robolectric阴影时出现空指针异常

时间:2015-06-26 20:19:06

标签: java android robolectric

在Robolectric 2.4中,我需要为android.os.UserManager类创建一个自定义阴影。

以下是要测试的代码:

private Bundle checkFoo() {
    UserManager userMgr = ((UserManager) getSystemService(Context.USER_SERVICE));
    Bundle restrictionsBundle = userMgr.getApplicationRestrictions("test-pkg_name");
    return restrictionsBundle;
}

由于Robolectric在2.4中没有提供默认的ShadowUserManager,因此我创建了以下自定义阴影UserManager类:

@Implements(UserManager.class)
public class ShadowUserManager {

@Implementation
public Bundle getApplicationRestrictions(String packageName) {
...
return new Bundle();
}

对于上面的类,我试图像下面那样遮蔽构造函数但是IUserManager似乎无法导入。

public void __constructor__(Context context, IUserManager usrMgr){
}

以下是测试代码:

@RunWith(MyTestRunner.class)
@Config(shadows = {ShadowUserManager.class})
public class MyTestClass {
@Test
public void testFoo() {
    Bundle actualBundle = checkfoo();
    //assert actual and expected bundle
    ...
}
}

我相信我不需要在我的TestRunner的shouldInstrument()函数中明确指定UserManager,因为UserManger位于android.os包中,如果阴影可用,默认情况下会对其进行检测。 (虽然我也尝试过但无济于事!!)

在运行测试时,我总是在尝试在userMgr对象上调用getApplicationRestrictions()时在checkFoo()函数中获取空指针。 userMgr总是最终为null。 任何解决此问题的指针都表示赞赏。

或者有没有办法在Android上下文中模拟getSystemService()API以提供自定义UserManager对象?

0 个答案:

没有答案