test studio example activity android robolectric

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!