使Robolectric与Android兼容性套件一起使用



我尝试使用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>

最新更新