रोबोइलेक्ट्रिक में एक बटन क्लिक का अनुकरण करना काफी सरल है:

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

हालांकि, मुझे यह पता लगाना प्रतीत नहीं होता कि मेनू आइटम के साथ एक ही चीज़ कैसे करें। मैं Activity.onCreateOptionsMenu में एक मेनू बनाता हूं, मैं इसके किसी एक आइटम पर एक क्लिक का अनुकरण कैसे कर सकता हूं?

32
futlib 23 सितंबर 2011, 09:24

6 जवाब

सबसे बढ़िया उत्तर
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()));

आनंद लेना!

32
Shailendra Singh Rajawat 2 अप्रैल 2013, 13:56

रोबोइलेक्ट्रिक 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()));
18
Philipp E. 3 अगस्त 2015, 16:25

रोबोइलेक्ट्रिक 3.0+ में कक्षा को RoboMenuItem कहा जाता है

12
karlicoss 1 अप्रैल 2015, 17:28

आप पहले से ही रोबोइलेक्ट्रिक का उपयोग कर रहे हैं तो RoboMenuItem का उपयोग क्यों नहीं करते?

private MenuItem menuItemName = new RoboMenuItem(R.id.action_names);
private MenuItem menuItemStar = new RoboMenuItem(R.id.action_stars);

जितनी आवश्यकता हो उतने आइटम जोड़ें।

@Test
public void onOptionItemSelectedTest() {
    activity.onOptionsItemSelected(menuItemStar);
    activity.onOptionsItemSelected(menuItemName);
}

सुनिश्चित करें कि आपकी गतिविधि शून्य नहीं है

 @Before
public void setUp() {
    activity = Robolectric.buildActivity(MainActivity.class)
            .create(new Bundle())
            .saveInstanceState(new Bundle())
            .restoreInstanceState(new Bundle())
            .resume()
            .get();
}

रोबोइलेक्ट्रिक संस्करण 4.3

2
Aks4125 21 सितंबर 2019, 20:33

रोबोइलेक्ट्रिक 2.4 का उपयोग करना:

Activity activity = Robolectric.buildActivity(MainActivity.class).create().get();
MenuItem item = new TestMenuItem(R.id.settings_option_item);
activity.onOptionsItemSelected(item);
1
karma 22 पद 2014, 22:42

यदि आप आवश्यक ओवरराइडिंग/एब्स्ट्रैक्ट कोडिंग की मात्रा में कटौती करना चाहते हैं तो आप मॉकिटो का भी उपयोग कर सकते हैं। इस तरह (कोटलिन में):

val menuItem = mock(MenuItem::class.java)
`when`(menuItem.itemId).thenReturn(R.id.itemId)
activity.onOptionsItemSelected(menuItem)
0
Stephen Rauch 30 मई 2018, 04:54