我正在编写一个调用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布局。