2

1つのアクティビティで管理される複数のフラグメントを持つアプリがあります。私の問題は、アプリケーションをテストし、各フラグメントのUIをテストしたいということです。最初のフラグメントをテストしてこれのすべてのビューを取得できますが、ボタンまたは他の何かをクリックすると(フラグメントを別のフラグメントに置き換えるため)、新しいフラグメントのビューを取得できませんが、MainActivityは現在のフラグメントは新しいフラグメントです。

@UiThreadTest
public void testNewFragmentScrollView() {
    assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_STARTSCREEN));
    ivNewFragment.performClick(); // replace fragment
    sleep();
    assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_NEW));
    //get something from new fragment, ID is copied from xml file and not false
    ScrollView scrollView = (ScrollView) mActivity.findViewById(R.id.sv_fragment_new_scrollable);    
    assertTrue(scrollView != null); //#false???
    mActivity.finish();
}

テストクラスで何かを更新する必要がありますか、それとも新しいフラグメントからビューが取得されないのはなぜですか?

4

1 に答える 1

2

コードを分割して問題を解決しました。setUpでフラグメントを変更して数ミリ秒待つと、各テストメソッドの新しいフラグメントからすべてのビューを取得できます。

@Override
protected void setUp() throws Exception {
    super.setUp();
    setActivityInitialTouchMode(false);
    mActivity = getActivity();
    buNewFragment =(Button) mActivity.findViewById(R.id.bu_actionbar_newfragment);
    mActivity.runOnUiThread(new Runnable() {
        public void run() {
            buNewFragment .performClick();
        }
    });
    sleep(500);//simple Thread.sleep() method
}

@UiThreadTest
public void testNewFragmentScrollView() {
    assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_NEW));
    ScrollView scrollView = (ScrollView) mActivity.findViewById(R.id.sv_fragment_new_scrollable);
    assertTrue(scrollView != null); //#t
}
于 2012-11-06T10:15:59.843 に答える