David
David

Reputation: 10738

robolectric 2 - create activity with intent

Does creating an activity using the .withIntent() not work in Robolectric 2? I'm doing the following

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

And i'm getting a NullPointerException when doing the following in the onCreate() of my activity.

Bundle bundle = getIntent().getExtras();

I can code a null check in my onCreate() and set the intent by doing the following but it seems redundant to set the intent and call the onCreate() method again when Robolectric already does that when creating the Activity instance. This seems like an unnecessary work around.

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

Upvotes: 10

Views: 5272

Answers (4)

CorayThan
CorayThan

Reputation: 17825

For newer versions of Robolectric use Robolectric.buildActivity(Class, Intent).

Upvotes: 6

saiyancoder
saiyancoder

Reputation: 1325

EDIT: It was fixed in version 2.2.

I tackled with the same issue. It was reported but no fix has been provided yet. For now, I manage to hack it using Activity's setter before calling onCreate(), taking advantage from the fact that its lifecycle has not yet started:

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

Upvotes: 0

David
David

Reputation: 10738

I figured out my problem. I wasn't instantiating the Intent properly. I was instantiating it with the no-arg constructor when i needed to give a Context and the class of the Activity it was being sent to

Upvotes: 3

Andy Dennie
Andy Dennie

Reputation: 6062

This is a case where a fluent-style API kinds of leads you down the wrong path...

You want to:

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

so that the intent is provided to the builder before it calls onCreate().

Upvotes: 6

Related Questions