2017-08-03 35 views
1

我正在使用Robolectic 3.2.1進行UT。 我創建了一個活動,並且兩個僅包含ViewPager內像這樣的片段:使用Robolectric進行UT時沒有繪製的片段中的ViewPager 3.2.1

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中?

回答

1

這不僅是關於ViewPager而且RecyclerView和其他子視圖。

你要模擬像顯示在屏幕上:

view.measure(SIZE, SIZE); 
view.layout(0, 0, SIZE, SIZE); 

而對於ViewPager項目,你必須模擬它像測試:

fragment.adapter.instantiateItem(findViewPager(), 0) 
Robolectric.flushForegroundThreadScheduler()