10

.withIntent()在 Robolectric 2 中使用不工作创建活动吗?我正在做以下事情

    activity = Robolectric.buildActivity(MyActivity.class)
                            .create()
                            .withIntent(intent)
                            .get();

在我的活动NullPointerException中执行以下操作时,我得到了一个。onCreate()

Bundle bundle = getIntent().getExtras();

我可以在我的代码中编写一个空检查并通过执行以下操作来设置意图,但是当 Robolectric 在创建实例时已经这样做时onCreate(),设置意图并再次调用该方法似乎是多余的。这似乎是一个不必要的工作。onCreate()Activity

    Robolectric.shadowOf(activity).setIntent(intent);
    activity.onCreate(null);
4

4 回答 4

6

在这种情况下,流式风格的 API 会导致您走错路……

你想要:

activity = Robolectric.buildActivity(MyActivity.class)
                        .withIntent(intent)
                        .create()
                        .get();

以便在调用 onCreate() 之前将意图提供给构建器。

于 2013-06-25T14:31:07.817 回答
6

对于较新版本的 Robolectric,请使用Robolectric.buildActivity(Class, Intent).

于 2017-06-21T23:44:20.597 回答
3

我发现了我的问题。我没有Intent正确地实例化。当我需要给出 a和它被发送到 Context的类时,我正在使用无参数构造函数实例化它Activity

于 2013-07-08T14:38:52.603 回答
0

编辑:它已在 2.2 版中修复。

我解决了同样的问题。据报道,但尚未提供修复。现在,我设法在调用 onCreate() 之前使用 Activity 的 setter 来破解它,利用它的生命周期尚未开始的事实:

Intent intent = new Intent();
MainActivity mainActivity = Robolectric.buildActivity(MainActivity.class)
                                       .create()
                                       .get();
mainActivity.setIntent(intent);
mainActivity.onCreate(null);

于 2013-07-08T13:27:40.067 回答