Robolectric 2-使用Intent创建Activity

10

在Robolectric 2中使用.withIntent()创建一个活动无效吗? 我正在执行以下操作

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

在我的活动的onCreate()中做以下操作时,我遇到了一个NullPointerException

Bundle bundle = getIntent().getExtras();

我可以在我的onCreate()中编写一个null检查,并通过以下方式设置intent,但是当Robolectric创建Activity实例时,设置意图并再次调用onCreate()方法似乎是冗余的。这似乎是一种不必要的解决方法。

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

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

6
这是一个案例,流畅式API会让你走上错误的道路...
你想要:
activity = Robolectric.buildActivity(MyActivity.class)
                        .withIntent(intent)
                        .create()
                        .get();

在调用onCreate()之前,让意图提供给构建器。


我已经尝试过了,对我没有用。getIntent() 仍然返回 null。 - David
对我来说也没用,所以我只是扩展了MyActivity并重写了onCreate方法。在那里,我使用一个新的意图调用了setIntent方法。 - Anatolii

3

我找到了问题所在。我没有正确地实例化Intent。我使用了无参构造函数进行实例化,但我需要提供一个Context和被发送到的Activity的类。


你如何获取Context? - Erik B
这里填什么:new Intent(Robolectric.application.getApplicationContext(), ?? ) - Erik B
应该将 ?? 替换为正在构建的活动。因此,MyActivity.class。 - Some Noob Student

0

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

我遇到了同样的问题。它被报告,但尚未提供解决方案。目前,我设法在调用onCreate()之前使用Activity的setter进行黑客攻击,利用其生命周期尚未开始的事实:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接