1

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

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

4

1 回答 1

3

Robolectric 1.x 对 Android 支持库的支持很差。Robolectric 2.0 明显更好,并且完全支持片段。今天刚刚发布了一个alpha:

<dependency>
  <groupId>org.robolectric</groupId>
  <artifactId>robolectric</artifactId>
  <version>2.0-alpha-1</version>
<dependency>
于 2013-01-31T04:31:29.937 回答