2

我有一个包含多个片段的应用程序,这些片段由一个 Activity 管理。我的问题是我想测试应用程序并测试每个片段的 UI。我可以测试第一个片段并获得它的所有视图,但是当我单击按钮或其他东西(用另一个片段替换片段)时,我无法获得新片段的任何视图,但我的 MainActivity 说当前的 Fragment 是新的 Fragment。

@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 中更改 Fragment 并等待几毫秒时,我可以从每个测试方法中的新 Fragment 获取所有视图

@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 回答