我尝试使用robolectric为我的Android应用程序运行测试,该应用程序正在使用Android-Sup-Pport软件包。在我的otCreate()方法中,我调用
getSupportLoaderManager().initLoader(0, null, this);
不幸的是,getSupportLoadManager()在此处返回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:我试图绑定自己的影子fragmentactivity:
@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);
这似乎暂时工作。我将不得不进一步看看它是否做我想要的。不知道这是否以任何方式是正确的方式。
robolectric 1.x对Android支持库的支持很差。Robolectric 2.0明显更好,并为碎片提供全部支持。alpha今天刚刚发布:
<dependency>
<groupId>org.robolectric</groupId>
<artifactId>robolectric</artifactId>
<version>2.0-alpha-1</version>
<dependency>