0

Android アプリでアクションバー ナビゲーションの単体テストを作成しています。2 つのタブ (ホームとメンション) があります。ホームタブはホームフラグメントを表示し、メンションタブはメンションフラグメントを表示する必要があります。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 ステートメントは「Mentions」を出力します。そのため、メンション タブはナビゲーション バーで確実に選択されています。

4

1 に答える 1

0

追加してみる

sfm.executePendingTransactions();

actionBar.selectTab(tab1);
于 2014-03-31T22:02:28.440 に答える