簡體   English   中英

如何使用Robolectric在Android中測試菜單

[英]How to test menu in Android with Robolectric

我需要使用Robolectric在Android應用程序中編寫測試菜單。

菜單源代碼:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch (item.getItemId()) {
    case R.id.exit:
        this.finish();
        break;
    default:
        Toast.makeText(this, getString(R.string.errMsg), Toast.LENGTH_SHORT).show();
        break;
    }
    return super.onMenuItemSelected(featureId, item);
} 

請幫忙寫測試

以下示例應該是任何開始使用Robolectric的人的一個很好的例子。 它在AndroidStudio下使用Robolectric 3.0。

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 19)
public class MainActivityTest {
    @Test
    public void shouldCloseActivity() {
        MainActivity activity = Robolectric.setupActivity(MainActivity.class);
        MenuItem menuItem = new RoboMenuItem(R.id.exit);
        activity.onOptionsItemSelected(menuItem);
        ShadowActivity shadowActivity = Shadows.shadowOf(activity);
        assertTrue(shadowActivity.isFinishing());
    }
}

實際上,如果可能的話,你應該避免使用避免使用RoboMenuItem。 您可以通過讓robolectric創建活動並使其可見來獲取活動創建的實際菜單。

MainActivity activity = Robolectric.buildActivity(MainActivity.class).create().visible().get();

然后,您可以使用ShadowActivity獲取實際創建的菜單選項;

shadowOf(activity).getOptionsMenu()

要獲取實際的MenuItem:

shadowOf(activity).getOptionsMenu().findMenuItem(...)

然后,您可以將實際的menuItem傳遞給onOptionsItemSelected。

RoboMenuItem只是一個虛擬外觀,實際上robolectric開發人員建議盡可能避免使用它。

獲得MenuItem時,kingargyle有一個很好的答案。

如果您只是希望能夠點擊該項目,您可以使用:

shadowOf(activity).clickMenuItem(R.id....);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM