使用 Robolectric 3.2.1 进行 UT 时未绘制片段中的 ViewPager
ViewPager in fragment not drawn while doing UT with Robolectric 3.2.1
我正在使用 Robolectic 3.2.1 进行 UT。
我创建了一个 Activity 和一个片段,它们都只包含一个 ViewPager,如下所示:
public class ViewPagerTestActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_test);
}
}
public class ViewPagerTestFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager_test, container, false);
return view;
}
}
和布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
当我 运行
时,ViewPager 与 ViewPagerTestActivity 一起运行良好
Robolectric.setupActivity(ViewPagerTestActivity.class);
但是当我运行
SupportFragmentTestUtil.startFragment(new ViewPagerFragment());
我发现ViewPager的onDraw()和onMeasure()都没有被调用。
谁能告诉我为什么或如何使 ViewPager 被绘制到 ViewPagerTestFragment 中?
这不仅是关于 ViewPager
,还有 RecyclerView
和其他子视图。
您必须模拟在屏幕上显示:
view.measure(SIZE, SIZE);
view.layout(0, 0, SIZE, SIZE);
而对于 ViewPager
项,您必须在测试中模拟它,例如:
fragment.adapter.instantiateItem(findViewPager(), 0)
Robolectric.flushForegroundThreadScheduler()
我正在使用 Robolectic 3.2.1 进行 UT。 我创建了一个 Activity 和一个片段,它们都只包含一个 ViewPager,如下所示:
public class ViewPagerTestActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_test);
}
}
public class ViewPagerTestFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager_test, container, false);
return view;
}
}
和布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
当我 运行
时,ViewPager 与 ViewPagerTestActivity 一起运行良好Robolectric.setupActivity(ViewPagerTestActivity.class);
但是当我运行
SupportFragmentTestUtil.startFragment(new ViewPagerFragment());
我发现ViewPager的onDraw()和onMeasure()都没有被调用。 谁能告诉我为什么或如何使 ViewPager 被绘制到 ViewPagerTestFragment 中?
这不仅是关于 ViewPager
,还有 RecyclerView
和其他子视图。
您必须模拟在屏幕上显示:
view.measure(SIZE, SIZE);
view.layout(0, 0, SIZE, SIZE);
而对于 ViewPager
项,您必须在测试中模拟它,例如:
fragment.adapter.instantiateItem(findViewPager(), 0)
Robolectric.flushForegroundThreadScheduler()