2013-06-19 14 views
9

Czy tworzenie aktywności za pomocą .withIntent() nie działa w Robolectric 2? Robię następującerobolectric 2 - tworzenie aktywności z zamiarem

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

i jestem coraz NullPointerException podczas wykonywania następujących czynności w onCreate() mojej działalności.

Bundle bundle = getIntent().getExtras(); 

mogę kodować null czek w moim onCreate() i ustawić intencji wykonując następujące ale wydaje się zbędne, aby ustawić intencji i ponownie wywołać metodę onCreate() gdy Robolectric już robi, że podczas tworzenia instancji Activity. Wydaje się to niepotrzebną pracą.

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

Odpowiedz

3

zorientowali się mój problem. Nie tworzyłem poprawnie instancji Intent. Stworzyłem instancję z konstruktorem bez arg, gdy potrzebowałem dać Context i klasę Activity, która została wysłana do

+0

Jak uzyskać Kontekst? –

+0

Co dalej: nowa intencja (Robolectric.application.getApplicationContext(), ??) –

+0

?? należy zastąpić budowanym działaniem. Więc MyActivity.class –

6

Jest to przypadek, w którym biegły stylu API rodzaje prowadzi cię w dół złej drodze ...

Chcecie:

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

tak, że intencją jest, aby program budujący, zanim wywoła onCreate().

+0

Próbowałem już. nie działa dla mnie. 'getIntent()' nadal zwracał wartość null dla mnie – David

+0

To nie działało również dla mnie, więc po prostu rozszerzyłem MyActivity i przeskoczyłem naCreate. Tam nazwałem setIntent nową intencją. – user1055395

0

EDYCJA: Naprawiono w wersji 2.2.

Zajmowałem się tym samym problemem. To was reported, ale nie podano jeszcze poprawki. Na razie udało mi się siekać go za pomocą setter czy działalność jest przed wywołaniem onCreate(), korzystając z faktu, że jego cyklu życia nie została jeszcze rozpoczęta:

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

3

Dla nowszych wersji aplikacji Robolectric Robolectric.buildActivity(Class, Intent).

Powiązane problemy