让robolectric与Android兼容包一起使用

时间:2012-10-21 19:42:09

标签: android robolectric

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

这似乎暂时起作用。我将不得不进一步尝试看它是否符合我的要求。不知道这是否是正确的方式。

1 个答案:

答案 0 :(得分:3)

Robolectric 1.x对Android支持库的支持不足。 Robolectric 2.0明显更好,并且完全支持片段。阿尔法今天刚刚发布:

<dependency>
  <groupId>org.robolectric</groupId>
  <artifactId>robolectric</artifactId>
  <version>2.0-alpha-1</version>
<dependency>