android - studio - Simulando un clic en un elemento del menú en Robolectric
robolectric github (5)
Es bastante simple simular un clic de botón en Robolectric:
Button someButton = (Button) findViewById(R.id.some_button);
someButton.performClick();
Sin embargo, parece que no puedo encontrar la manera de hacer lo mismo con un elemento del menú. Creo un menú en Activity.onCreateOptionsMenu
, ¿cómo puedo simular un clic en uno de sus elementos?
En Robolectric 3.0+, puedes usar 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()));
En robolectric 3.0+ la clase se llama RoboMenuItem
También puede usar Mockito si desea reducir la cantidad de codificación abstracta / abstracta requerida. Así (en Kotlin):
val menuItem = mock(MenuItem::class.java)
`when`(menuItem.itemId).thenReturn(R.id.itemId)
activity.onOptionsItemSelected(menuItem)
Utilizando robolectric 2.4:
Activity activity = Robolectric.buildActivity(MainActivity.class).create().get();
MenuItem item = new TestMenuItem(R.id.settings_option_item);
activity.onOptionsItemSelected(item);
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()));
¡Disfrutar!