我尝试使用 Robolectric 为我的 Android 应用程序运行测试,该应用程序使用 android-support 包。在我的 onCreate() 方法中,我调用
getSupportLoaderManager().initLoader(0, null, this);
不幸的是,getSupportLoaderManager() 在这里返回 null。我是否必须准备任何东西才能使兼容性类可用于 robolectric?
我的测试项目的类路径中有 android.jar (android-8) 和 android-support-v4.jar,以及 robolectric-1.2 快照版本。
测试类:
@RunWith(RobolectricTestRunner.class)
public class HoebAppActivityTest {
@Test
public void shouldStartActivity() {
final MyActivity activity = new MyActivity();
System.out.println(activity.getSupportLoaderManager()); // return null
activity.onCreate(null);
}
}
编辑:
System.out.println(Robolectric.directlyOnFullStack(activity)
.getSupportLoaderManager());
输出 android.support.v4.app.LoaderManagerImpl@9a90b9 所以我想,我只需要将它反馈给活动?好像我离这里越来越近了。
Edit2:我试图绑定我自己的 ShadowFragmentActivity:
@Implements(FragmentActivity.class)
public class ShadowFragmentActivity extends
com.xtremelabs.robolectric.shadows.ShadowFragmentActivity {
@RealObject
private FragmentActivity realActivity;
@Implementation
public LoaderManager getSupportLoaderManager() {
return Robolectric.directlyOnFullStack(realActivity)
.getSupportLoaderManager();
}
}
与
Robolectric.bindShadowClass(ShadowFragmentActivity.class);
这似乎暂时有效。我将不得不进一步尝试看看它是否符合我的要求。不知道这是否是正确的方法。