在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对象?