32

Robolectric でボタンのクリックをシミュレートするのはかなり簡単です。

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

ただし、メニュー項目で同じことを行う方法がわかりません。でメニューを作成しましたActivity.onCreateOptionsMenuが、その項目の 1 つのクリックをシミュレートするにはどうすればよいですか?

4

6 に答える 6

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

楽しみ!

于 2011-12-21T05:46:28.353 に答える
18

Robolectric 3.0 以降では、以下を使用できます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()));
于 2015-04-08T00:11:45.633 に答える
12

robolectric 3.0+ では、クラスは呼び出されますRoboMenuItem

于 2015-04-01T14:28:13.193 に答える
1

Robolectric 2.4 の使用:

Activity activity = Robolectric.buildActivity(MainActivity.class).create().get();
MenuItem item = new TestMenuItem(R.id.settings_option_item);
activity.onOptionsItemSelected(item);
于 2014-12-22T19:30:08.270 に答える