我正在为我的Android应用编写动作栏导航的单元测试。有两个选项卡(主页和提及)。主页选项卡应显示主页片段,提及选项卡应显示提及片段。我使用fragmentmanager获取活动中的当前片段,然后使用instanceof查看它们是否属于正确的类。
@UiThreadTest
public void testNavigationBar() {
assertEquals(ActionBar.NAVIGATION_MODE_TABS, actionBar.getNavigationMode());
assertEquals(2, actionBar.getNavigationItemCount());
Tab tab0 = actionBar.getTabAt(0);
assertNotNull(tab0);
assertNotNull(tab0.getText());
assertEquals(mActivity.getBaseContext().getString(R.string.navigation_home), tab0.getText());
Tab tab1 = actionBar.getTabAt(1);
assertNotNull(tab1);
assertNotNull(tab1.getText());
assertEquals(mActivity.getBaseContext().getString(R.string.navigation_mention),
tab1.getText());
FragmentManager sfm = mActivity.getSupportFragmentManager();
actionBar.selectTab(tab0);
assertEquals(0, actionBar.getSelectedNavigationIndex());
Fragment currentFragment = sfm.findFragmentById(R.id.frameContainer);
assertNotNull(currentFragment);
assertTrue(currentFragment instanceof HomeTimeLineFragment);
actionBar.selectTab(tab1);
assertEquals(1, actionBar.getSelectedNavigationIndex());
Log.d(tag, String.valueOf(actionBar.getSelectedTab().getText()));
currentFragment = sfm.findFragmentById(R.id.frameContainer);
assertNotNull(currentFragment);
assertTrue(currentFragment instanceof MentionsFragment);
}
测试失败,因为currentFragment仍然是HomeTimeLineFragment的实例。顺便说一句,log.d语句打印出“提及”。因此,导航栏中明确选择了提及标签。
答案 0 :(得分:0)
尝试添加
sfm.executePendingTransactions();
之后
actionBar.selectTab(tab1);