2011-09-23 4 views
28

Es bastante simple para simular un clic de botón en Robolectric:Simulación de un clic en un elemento de menú en Robolectric

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

Sin embargo, me parece que no puede encontrar la manera de hacer lo mismo con un elemento de menú . Creo un menú en Activity.onCreateOptionsMenu, ¿cómo puedo simular un clic en uno de sus elementos?

Respuesta

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())); 

Enjoy!

+13

Se ha vuelto aún más fácil, en lugar de crear el tipo anónimo, ahora puede usar '' MenuItem item = nuevo TestMenuItem (R.id.hello); '' – passy

+1

Esto no funciona para el robolectric actual [2012-11]? – Freewind

+0

funciona en Robolectric 2.3 utilizando el modo @ passy – Maragues

1

Usando robolectric 2.4:

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

En robolectric 3.0+ la clase se llama RoboMenuItem

+1

y luego ¿qué? Supongo que quiere decir que TestMenuItem se convirtió en RoboMenuItem, pero ¿qué pasa con el resto del código? – SJoshi

16

En Robolectric 3.0+, puede utilizar 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())); 
Cuestiones relacionadas