Android Fragment的测试仅在首先执行时传递

时间:2017-02-17 02:37:01

标签: java unit-testing android-fragments

我正在编写一个调用Activity的{​​{1}}的单元测试,特别是this class。这是我的代码:

Fragment

这是XML布局:

@RunWith(AndroidJUnit4.class)
public class ContentDetailsActivityTest {

    private ContentDetailsActivity mContentDetailsActivity;

    @Rule
    public ActivityTestRule<ContentDetailsActivity> mActivityRule = new ActivityTestRule<>
            (ContentDetailsActivity.class);

    @Before
    public void setUp() throws Exception {
        mContentDetailsActivity = mActivityRule.getActivity();
    }

    @After
    public void tearDown() throws Exception {
        mContentDetailsActivity = null;
    }

    @Test
    public void onCreate() throws Exception {
        ContentDetailsFragment mFragment = (ContentDetailsFragment) mContentDetailsActivity
                .getFragmentManager().findFragmentById(R.id.content_details_fragment);

        assertTrue(mFragment.isVisible());
    }

    @Test
    public void onActionListUpdateRequired() throws Exception {
        // [irrelevant]
    }

    @Test
    public void onStart() throws Exception {
        // [irrelevant]
    }

    @Test
    public void onStop() throws Exception {
        // [irrelevant]
    }
}

每个测试在单独运行时通过。但是,当测试一起运行时,由于<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.amazon.android.tv.tenfoot.ui.fragments.ContentDetailsFragment" android:id="@+id/content_details_fragment" android:layout_width="match_parent" android:layout_height="match_parent" /> 为空,onCreate()失败。我可以通过命名测试来解决这个问题,以便首先调用Fragment,但我认为这是一种不好的做法,因为单元测试应该彼此独立。

根据我的研究,这是由于onCreate()在每次测试开始时没有正确重新创建。我为Activity方法添加了mContentDetailsActivity.recreate(),为每种方法添加了setUp()注释;虽然这解决了@UiThreadTest问题,但其他一半测试失败了,在成功和失败之间交替。

有人知道解决方案吗?

编辑:添加了XML布局。

0 个答案:

没有答案