2013-10-19 63 views
0

我正在爲我的android應用程序的操作欄導航編寫單元測試。有兩個選項卡(主頁和提及)。主標籤應該顯示主頁片段,提示標籤應該顯示提示片段。我正在使用fragmentmanager來獲取活動中的當前片段,然後使用instanceof來查看它們是否屬於正確的類。使用ActivityInstrumentationTestCase2的Android操作欄單元測試

@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的一個實例。 Btw log.d語句打印出「提及」。所以提到選項卡肯定是在導航欄中選擇的。

回答

0

嘗試增加

sfm.executePendingTransactions(); 

actionBar.selectTab(tab1); 
相關問題