ViewPager(FragmentPagerAdapter)のテスト
ViewPager(+FragmentPagerAdapter)を使っている際に、Activityのテスト(ActivityInstrumentalTestCase2)でViewPagerで利用されているFragmentPagerAdapterを取って、そのFragmentを取得してごにょごにょテストする方法
で要件として
- ActivityからViewPagerなインスタンスを取る
- ViewPagerからFragmentPagerAdapterなインスタンスを取る
- FragmentPagerAdapterから利用されているFragmentのインスタンスを取る (このFragmentはListFrament)
っていう所。んまぁActivityとかFragmentとかAdapterなソースは省略
package kinjouj.sample.feedreader.test;
import java.sql.SQLException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.widget.ListAdapter;
import kinjouj.sample.feedreader.Feed;
import kinjouj.sample.feedreader.FeedDao;
import kinjouj.sample.feedreader.FeedListFragment;
import kinjouj.sample.feedreader.FeedUtils;
import kinjouj.sample.feedreader.MainActivity;
import kinjouj.sample.feedreader.R;
import static org.hamcrest.Matchers.*;
// BaseActivityTestCaseはActivityInstrumentalTestCase2を継承した抽象クラス
public class MainActivityTestCase extends BaseActivityTestCase<MainActivity> {
public MainActivityTestCase() {
super(MainActivity.class);
}
// setUpメソッドは省略
public void test_onCreate() throws Exception {
getInstrumentation().waitForIdleSync();
MainActivity activity = (MainActivity)getActivity();
assertThat(activity, notNullValue());
ViewPager viewPager = (ViewPager)activity.findViewById(R.id.view_pager);
assertThat(viewPager, notNullValue());
FragmentPagerAdapter pagerAdapter = (FragmentPagerAdapter)viewPager.getAdapter();
assertThat(pagerAdapter, notNullValue());
ListFragment fragment = (ListFragment)pagerAdapter.instantiateItem(
viewPager,
viewPager.getCurrentItem()
);
assertThat(fragment, notNullValue());
assertThat(fragment, instanceOf(FeedListFragment.class));
}
}
FragmentPagerAdapterではgetItemメソッドを使って、Fragmentのインスタンスを生成すると思うのでだけれども、その生成されたインスタンスを取得するのであればinstantiateItemメソッドを利用する事で可能な模様
という感じでViewPager(+FragmentPagerAdapter)を使うにあたってのテストはこんな感じかなーっと
ちなみに、FragmentPagerAdapterじゃなくてPagerAdapterだったらinstantiateItemでビューの初期化を行うっていうのがデフォなのかも知れないのでそのケースではこれは使えないかと