2011-09-23 11 views
28

Jest to dość proste, aby zasymulować kliknięcie przycisku w Robolectric:Symulowanie kliknięcie na menu w Robolectric

Button someButton = (Button) findViewById(R.id.some_button); 
someButton.performClick(); 

Jednak nie wydaje się dowiedzieć się, jak zrobić to samo z pozycji menu . Tworzę menu w Activity.onCreateOptionsMenu, w jaki sposób mogę zasymulować kliknięcie jednego z jego elementów?

Odpowiedz

28
MenuItem item = new TestMenuItem() { 
    public int getItemId() { 
    return R.id.hello; 
    } 
}; 

activity.onOptionsItemSelected(item); 

ShadowActivity shadowActivity = Robolectric.shadowOf(activity); 
Intent startedIntent = shadowActivity.getNextStartedActivity(); 
ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent); 

assertThat(shadowIntent.getComponent().getClassName(), equalTo(HelloActivity_.class.getName())); 

Ciesz się!

+13

To stało się jeszcze łatwiejsze zamiast tworzyć anonimowy typ, można teraz używać wartości '' MenuItem item = new TestMenuItem (R.id.hello); '' – passy

+1

To nie działa w przypadku aktualnej robolektryki [2012-11]? – Freewind

+0

działa na Robolectric 2.3 za pomocą @ passy's way – Maragues

1

Korzystanie robolectric 2.4:

Activity activity = Robolectric.buildActivity(MainActivity.class).create().get(); 
MenuItem item = new TestMenuItem(R.id.settings_option_item); 
activity.onOptionsItemSelected(item); 
8

W robolectric 3.0+ klasa nazywa RoboMenuItem

+1

, a następnie co? Zgaduję, że masz na myśli to, że TestMenuItem stał się RoboMenuItem, ale co z resztą kodu? – SJoshi

16

W Robolectric 3.0+ można używać ShadowActivity.clickMenuItem(menuItemResId):

 // Get shadow 
    ShadowActivity shadowActivity = Shadows.shadowOf(activity); 

    // Click menu 
    shadowActivity.clickMenuItem(R.id.settings_option_item); 

    // Get intent 
    Intent startedIntent = shadowActivity.getNextStartedActivity(); 
    ShadowIntent shadowIntent = Shadows.shadowOf(startedIntent); 

// Make your assertion 
assertThat(shadowIntent.getComponent().getClassName(), equalTo(HelloActivity_.class.getName())); 
Powiązane problemy