我尝试使用Robolectric为我的Android应用程序运行测试,该应用程序正在使用android-support软件包。在我的onCreate()方法中,我调用
getSupportLoaderManager().initLoader(0, null, this);
不幸的是,getSupportLoaderManager()在这里返回null。我是否必须准备任何东西以使兼容性类可用于robolectric?
我的测试项目中的classpath中有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);
这似乎暂时起作用。我将不得不进一步尝试看它是否符合我的要求。不知道这是否是正确的方式。
答案 0 :(得分:3)
Robolectric 1.x对Android支持库的支持不足。 Robolectric 2.0明显更好,并且完全支持片段。阿尔法今天刚刚发布:
<dependency>
<groupId>org.robolectric</groupId>
<artifactId>robolectric</artifactId>
<version>2.0-alpha-1</version>
<dependency>